《Java从入门到精通》第十章学习笔记

第10章  Java集合类

一、概述

Java中的java.util包中提供了一些集合类,也被称为容器,不同于数组,集合的长度是可变的,存放的是对象的引用。常用的集合有List集合、Set集合、Map集合,其中List和Set实现了Collection接口。

二、集合类接口的常用方法

1、List接口的常用方法:因为继承了Collection接口,所以List接口也继承了Collection中的所有方法。List集合以线性有序的方式存储对象。List集合中可以包含重复的对象,的主要方法如下:

(1)add(int index,Object obj):返回值为void。用于向集合中指定索引位置添加对象。

(2)addAll(int index,Collection coll):返回值为boolean型。用于向集合中指定索引位置添加指定的集合对象。

(3)remove(int index):返回值为Object。用于移除集合中的指定索引位置的对象。

(4)get(int index):返回值为Object。用于获取指定索引位置的对象。
(5)indexOf(Object obj):返回值int。返回集合中对象第一次出现的索引位置,如果不存在则返回-1。

(6)lastIndexOf(Object obj):返回值int。返回集合中对象最后一次出现的索引位置,如果不存在则返回-1。

(7)subList(int formIndex,int toIndex):返回值List。获取两索引之间元素对象组成的List集合。

(8)set(int index,E element):返回值Object。用指定元素替换列表中指定索引位置的元素。

(9)listIterator():返回值ListIterator.用于获得一个包含所有对象的ListIterator列表迭代器。

 1 import java.util.List;
 2 import java.util.LinkedList;
 3 import java.util.Iterator;
 4 public class GenericTest{
 5     public static void main(String[] args){
 6         String a="A",b="B",c="C",d="D",e="E";//定义插入集合的字符串对象
 7         List<String> list=new LinkedList<String>();
 8         //创建一个LinkedList集合
 9         list.add(a);
10         list.add(e);
11         list.add(d);
12         Iterator<String> fristIterator=list.iterator();
13         //创建List的迭代器
14         System.out.println("修改前集合中元素是:");
15         while(fristIterator.hasNext()){
16             System.out.print(fristIterator.next()+" ");
17         }
18         list.set(1,b);
19         list.set(2,c);
20         Iterator<String> it=list.iterator();
21         System.out.println("");
22         System.out.println("修改后集合中元素是:");
23         while(it.hasNext()){
24             System.out.print(it.next()+" ");
25         }
26     }
27 }
 1 //创建List集合对象,通过add()方法添加元素,并将特殊对象元素在索引中出现的第一次、最后一次索引输出
 2 import java.util.List;
 3 import java.util.LinkedList;
 4 import java.util.Iterator;
 5 public class CollectionDemo {
 6
 7     public static void main(String[] args) {
 8         String a="a",b="b",c="c",d="d",e="e",x="apple";
 9         List<String> list=new LinkedList<String>();
10         list.add(a);
11         list.add(x);
12         list.add(b);
13         list.add(c);
14         list.add(d);
15         list.add(e);
16         list.add(a);
17         list.add(d);
18         list.add(x);
19         Iterator<String> it=list.iterator();
20         System.out.println("列表List为:");
21         int index=0;
22         while(it.hasNext()){
23             System.out.print("序号"+index+":"+it.next()+";");
24             index++;
25         }
26         System.out.println("其长度为:"+list.size());
27         if((list.indexOf(a)!=-1)){
28             System.out.println("a第一次出现在列表中的索引位置为:"+list.indexOf(a));
29             System.out.println("a最后一次出现在列表中的索引位置为:"+list.lastIndexOf(a));
30         }else{
31             System.out.println("a没有出现在列表中");
32         }
33         if((list.indexOf(x)!=-1)){
34             System.out.println("apple第一次出现在列表中的索引位置为:"+list.indexOf(x));
35             System.out.println("apple最后一次出现在列表中的索引位置为:"+list.lastIndexOf(x));
36         }else{
37             System.out.println("apple没有出现在列表中");
38         }
39         if((list.indexOf("ts")!=-1)){
40             System.out.println("ts第一次出现在列表中的索引位置为:"+list.indexOf("ts"));
41             System.out.println("ts最后一次出现在列表中的索引位置为:"+list.lastIndexOf("ts"));
42         }else{
43             System.out.println("ts没有出现在列表中");
44         }
45     }
46 }

2、Set接口的常用方法:一样也继承了Collection接口的所有方法,并且Set集合中不允许有重复值。

(1)add(Object obj):如果Set集合中不存在obj则添加。

(2)addAll(Collection coll):将coll添加到Set集合尾部。

(3)remove(Object obj):移除指定的元素。

(4)retainAll(Collection coll):只保存Set集合中包含在coll集合中的元素。

(5)removeAll(Collection coll):移除Set集合中所有包含在coll集合中的元素。

(6)clear():清空Set集合。

(7)iterator():返回Set集合中元素进行迭代的迭代器。

//创建一个List集合向其中添加元素
//再创建一个Set集合
//利用addAll()将List集合对象存入Set集合,打印Set集合中元素
import java.util.List;
import java.util.Set;
import java.util.LinkedList;
import java.util.HashSet;
public class CollectionDemo {

    public static void main(String[] args) {
        int[] a0={1,3,5,6,8,9,12,15};
        int[] a1={2,4,5,6,8,11,13,15,21};
        List<Integer> list=new LinkedList<Integer>();
        Set<Integer> set=new HashSet<Integer>();
        for(int x:a0){
            list.add(x);
        }
        for(int x:a1){
            set.add(x);
        }
        System.out.println("list集合初始化为:"+list);
        System.out.println("set集合初始化为:"+set);
        set.addAll(list);
        System.out.println("新的set集合为:"+set+"长度为:"+set.size());
        set.clear();
        System.out.println("清空后set长度为:"+set.size());
    }
}

3、Map接口的常用方法
Map接口提供了将键值映射到值的对象,一个映射中不能包括重复的键,而且每个键最多只能映射到一个值。

(1)put(key k,value v):向集合中添加指定的键和值。

(2)containskey(Object key):如果此映射包含指定的键的映射关系,则返回true.

(3)containsValue(Object value):如果此映射将一个或多个键指向指定值,则返回true.

(4)get(Object key):如果存在指定的键对象,则返回该对象对应的值,否则返回null。

(5)keySet():返回该集合中的所有键对象组成的Set集合。

(6)values():返回该集合中所有值对象形成的Collection集合。

 1 //向一个Map集合中插入元素并根据Key的值打印集合中的元素
 2
 3 import java.util.Map;
 4 import java.util.HashMap;
 5 public class MapDemo {
 6
 7     public static void main(String[] args) {
 8         Map<String,String> map=new HashMap<String,String>();
 9         map.put("1","apple");
10         map.put("2","pear");
11         map.put("3","orange");
12         for(int i=1;i<=3;i++){
13             System.out.println("第"+i+"个元素是:"+map.get(""+i+""));
14         }
15     }
16 }

 三、集合类接口的实现类

1、List接口的常用实现类有ArrayList和LinkedList。

(1)ArrayList类:通过List接口具备的方法实现了可变数组,可通过索引快速访问,但插入和删除操作速度较慢。

(2)LinkedList类:采用了链表结构,便于快速插入和删除对象,但随机访问速度较慢。

List<String> list1=new ArrayList<String>();
List<String> list2=new LinkedList<String>();

对象的声明采用接口类型可便于程序的拓展和修改,并通过泛型<String>约束对象的类型。

 1 import java.util.List;
 2 import java.util.ArrayList;
 3 public class Gather {
 4
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         List list=new ArrayList();
 8         System.out.println("数组列表长度为:"+list.size());
 9         int ri=(int)(Math.random()*100);
10         System.out.println("随机数取得为:"+ri);
11         list.add("a");
12         list.add("b");
13         list.add("c");
14         System.out.println("创建后数组列表长度为:"+list.size());
15         int i=ri%list.size();
16         System.out.println("随机获取数组中的元素:"+list.get(i));
17         list.remove(2);
18         System.out.println("将索引是‘2‘的元素移除后,数组中的元素是:");
19         for(int j=0;j<list.size();j++){
20             System.out.print(list.get(j)+" ");
21         }
22     }
23 }

2、Set接口的实现类常用的主要有HashSet类和TreeSet类,一般用Set接口类型声明创建的Set对象。

 1 //People类定义
 2 public class People {
 3     private String name;
 4     private long id_card;
 5     public People(String name,long id_card){
 6         this.name=name;
 7         this.id_card=id_card;
 8     }
 9     public long getId_card(){
10         return this.id_card;
11     }
12     public void setId_card(long id){
13         this.id_card=id;
14     }
15     public String getName(){
16         return this.name;
17     }
18     public void setName(String name){
19         this.name=name;
20     }
21 }
22
23 import java.util.Iterator;
24 import java.util.Set;
25 import java.util.HashSet;
26 public class CollectionDemo {
27
28     public static void main(String[] args) {
29         // TODO Auto-generated method stub
30         Set<People> hashSet=new HashSet<People>();
31         hashSet.add(new People("KellyWong",98102106));
32         hashSet.add(new People("TinsonG",98102118));
33         hashSet.add(new People("MingLeu",98102135));
34         hashSet.add(new People("YiJon",98102142));
35         hashSet.add(new People("YooSan",98102151));
36         Iterator<People> it=hashSet.iterator();
37         System.out.println("hashSet集合中的元素是:");
38         while(it.hasNext()){
39             People p=it.next();
40             System.out.println(p.getName()+" "+p.getId_card());
41         }
42     }
43 }

3、Map接口的实现类主要有HashMap类和TreeMap类,通常用HashMap类实现的Map集合对于添加和删除映射关系的效率更高。HashMap是基于哈希表的Map接口的实现,HashMap中允许使用null键和null值,但必须保证键的唯一性。TreeMap中映射关系存在一定的顺序,在考虑需要实现顺序存储时可以考虑使用TreeMap类,因为TreeMap类中映射的顺序是按照键对象的规则,所以不允许键对象为null。

 1 public class Emp {
 2         public String e_id;
 3         public String e_name;
 4         public Emp(String id,String name){
 5             this.e_id=id;
 6             this.e_name=name;
 7         }
 8 }
 9 //测试主类,分别创建一个由HashMap和TreeMap实现的Map集合,并遍历之
10 import java.util.Map;
11 import java.util.HashMap;
12 import java.util.TreeMap;
13 import java.util.Set;
14 import java.util.Iterator;
15
16 public class MapTest {
17
18
19     public static void main(String[] args) {
20         // TODO Auto-generated method stub
21         Map map=new HashMap();
22         Emp emp1=new Emp("98102101","GTS");
23         Emp emp2=new Emp("98102102","WJ");
24         Emp emp3=new Emp("98102103","SYS");
25         Emp emp4=new Emp("98102104","YYZ");
26         Emp emp5=new Emp("98102105","LM");
27         map.put(emp1.e_id, emp1.e_name);
28         map.put(emp2.e_id, emp2.e_name);
29         map.put(emp3.e_id, emp3.e_name);
30         map.put(emp4.e_id, emp4.e_name);
31         map.put(emp5.e_id, emp5.e_name);
32         Set set=map.keySet();
33         Iterator it=set.iterator();
34         System.out.println("HashMap类实现的Map集合(无序):");
35         while(it.hasNext()){
36             String str=(String)it.next();
37             String name=(String)map.get(str);
38             System.out.println(str+" "+name);
39         }
40         TreeMap treemap=new TreeMap();
41         treemap.putAll(map);
42         Iterator iter=treemap.keySet().iterator();
43         System.out.println("TreeMap类实现的Map集合(按键对象升序):");
44         while(iter.hasNext()){
45             String str=(String)iter.next();
46             String name=(String)map.get(str);
47             System.out.println(str+" "+name);
48         }
49     }
50 }
//创建一个ArrayList类对象
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class ForArrayList {
  public static void main(String[] args){
    List<Integer> list=new ArrayList<Integer>();
    for(int i=0;i<10;i++){
        int x=(int)(Math.random()*100);
        list.add(x);
    }
    Iterator<Integer> it=list.iterator();
    System.out.println("ArrayList实例为:");
    while(it.hasNext()){
        System.out.print(it.next()+" ");
    }
    System.out.println();
    System.out.println("ArrayList实例中奇数为:");
    for(int i=0;i<list.size();i++){
        if(i%2==1){
            System.out.print(list.get(i)+" ");
        }
    }
  }

}

四、迭代器
1、利用Iterator接口创建迭代器,Iterator接口位于java.util包里。

(1)hasNext():如果当前仍有元素可以迭代,则返回true;

(2)next():返回迭代的下一个元素。

(3)remove():从迭代器指向的collection中移除迭代器返回的最后一个元素。

时间: 2024-10-19 10:53:53

《Java从入门到精通》第十章学习笔记的相关文章

《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门语言,但基本都只是了解了一个大概,入门肯定也算不上了.顶多也就能吹吹牛,说几个大的概念而已. 公司最近转型,决定抛弃PHP了,我们的出路是:要么H5,要么JAVA,要么走人.纠结了一段时间后,决定还是转JAVA了. 当一个人在自己熟悉的领域的时候,好像说什么都很有自信,都觉得自己是对的.那时候我们的

(转) Git版本控制软件结合GitHub从入门到精通常用命令学习手册

转载自:爱分享 » Git版本控制软件结合GitHub从入门到精通常用命令学习手册 原文传送门: http://www.ihref.com/read-16369.html 注意: 学习前请先配置好Git客户端 相关文章:Git客户端图文详解如何安装配置GitHub操作流程攻略 官方中文手册:http://git-scm.com/book/zh GIT 学习手册简介 本站为 Git 学习参考手册.目的是为学习与记忆 Git 使用中最重要.最普遍的命令提供快速翻阅. 这些命令以你可能需要的操作类型划

Python从入门到精通高校竞赛学习系列视频课程

课程目标Python从入门到精通高校竞赛学习系列视频课程适用人群Pythhon初学者,Python开发人员,有linux操作基础,能够坚持学习不放弃的同学,课程简介从零基础学习Python编程,理论结合实践,提高自己综合能力:方向和努力决定了自己的价值:通过本课程学习我们能够掌握基本开发知识,在工作和学习中独立完成相关任务:同时我们提供全面的技术支持和指导,如果有问题可以向我们咨询,我们会积极解决学习和工作中的问题 下载地址:百度网盘请添加链接描述 原文地址:http://blog.51cto.

Java从入门到精通pdf电子版

Java从入门到精通pdf电子版 链接:https://pan.baidu.com/s/1nzy8LV6d2_qAD3oKS-Fj9Q 提取码:at3x 简介: <Java从入门到精通>从初学者小白角度出发,通过通俗易懂的白话语言.丰富多彩的实战实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术和技能,让你在编程开发中越走越远 目录 · · · · · · 第一篇 基础篇 第1章 Java概述 第2章 Java基本语言 第3章 控制流程语句 第4章 数组 第二篇 面向对象 第5章

Git版本控制软件结合GitHub从入门到精通常用命令学习手册

GIT 学习手册简介 本站为 Git 学习参考手册.目的是为学习与记忆 Git 使用中最重要.最普遍的命令提供快速翻阅. 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以及参数. 本手册将从入门到精通指导大家. 首先,我们要从如何以 Git 的思维方式管理源代码开始. 如何以 GIT 的方式思考(这里可以不用看懂,接着看下面的内容,看完就全懂了.) 懂得 Git,第一件重要的事情就是要知道它与 Subversion.Perforce 或者任何你用过的版本控制工具都有

解读Java从入门到精通学习路线图

Java作为一种通用的编程语言可以做很多事情,但怎么学Java就看怎么用了,很多初学者想通过埋头苦学.马不停蹄的敲着代码记住Java基本原理,但一遇到困难便会让自己发狂,种种坎坷将自己打回原形. 为了排除大家的困惑,学习了精心准备Java学习路线图,建议你耐心的读完此篇,保你在学Java的道路上能事半功倍. 01Java基础知识 在学习Java之前要先了解计算机基础知识,然后再学习Java,同时也要熟知DOS常用命令.Java概述.JDK环境安装配置.环境变量配置,当JDK和环境变量配置完毕后,

《Java从入门到精通》第十二章学习笔记

第12章  输入和输出 一.流概述 流是指一组有序的数据序列,数据源和输出目标可以是文件,网络,压缩包或其他. 二.输入/输出流 所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类:所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类. 1.输入流 InputStream是所有字节输入流的父类,该类主要方法如下,方法出现错误时候会引发IOException异常. (1)read():从输入流中读取数据的下

《Java从入门到精通》第一、二章学习笔记

第1章 初识JAVA *Java开发的三个方向: 1.Java SE:主要用于桌面程序的开发: 2.Java EE:主要用于网页程序的开发: 3.Java ME:主要用于嵌入式系统程序的开发. *Java语言的主要特性: 1.面向对象: 2.分布性:可以在多个不同的主机上布置相关操作,同时数据也可以存放在多个不同的主机上,Java可以凭借URL对象访问网络对象,访问的方式和访问本地系统相同: 3.可移植性:Java程序与平台系统无关,通过JVM处理字节码文件以适应不同平台: 4.安全性:删除了类

《Java从入门到精通》第七章学习笔记

第7章 类和对象 一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实例化.要创建一个对象,必须基于类,即先要创建可描述该对象的类. 3.创建一个类 1 public class Telphone { 2 //属性(成员变量):有什么 3 float screen; 4 float cpu; 5 float mem; 6 //方法 :干什么 7 vo