14 集合类
14.1集合类概述
- 集合类又被称为容器,存放对象的引用,长度可变
- 常见的有List集合、Map集合、Set集合
- List集合、Set集合实现了Collection接口
- java.lang.Object
- Map
- HashMap
- TreeMap
- Collection
- Set
- HashSet
- TreeSet
- List
- ArrayList
- LikedList
- Set
- Map
14.2Collection接口
-
Collection接口是层次结构中的根接口,构成Collection的单位,称为元素。
-
Collection接口通常不能直接使用,但该接口提供了添加、删除元素、管理数据的方法
-
package com.JiHeLei; import java.util.*; public class Muster { public static void main(String[] args){ Collection list=new ArrayList();//实例化集合类对象 list.add("a");//向集合添加数据 list.add("b"); list.add("c"); Iterator it=list.iterator();//创建迭代器 while (it.hasNext()) {//判断是否有下一个元素 String str=(String)it.next();//获取集合中元素 System.out.println(str); } } }
-
Iterator的next()方法返回的是Object
14.3List集合
- List集合包括List接口以及List接口的所有实现类
- List集合中的元素允许重复,各元素顺序就是对象插入的顺序,可使用索引来访问集合中的元素
14.3.1List接口
- 包含Collection中的所有方法
- get(int index):获取指定索引位置的元素
- set(int index,Object obj):将集合中指定索引位置的对象修改为指定对象
14.3.2List接口的实现类
-
ArrayList类实现可变的数组,允许所有元素,包括NULL。
- 根据索引位置对集合进行快速的随机访问
- 插入或删除对象速度较慢
-
LinkedList
- 插入或删除对象方便,效率高
- 随机访问集合中的对象效率较慢
-
List list =new ArrayList(); List list2=new LinkedList();//通过LinkedList类实例化List集合
-
package com.JiHeLei; import java.util.*; public class Gather { public static void main(String[] args){ List list=new ArrayList(); int i=(int)Math.random()*(list.size()-1); list.add("a"); list.add("b"); list.add("c"); System.out.println("随机获取数组中的元素"+list.get(i)); list.remove(2); System.out.println("索引2元素移除后,数组中的元素是:"); for(int j=0;j<list.size();j++){ System.out.println(list.get(j)); } } }
14.4Set集合
-
Set集合包括Set接口以及Set接口的所有实现类
-
包含Collection中的所有方法
-
Set集合对象不按特定方式排序。不能包含重复对象。
-
常用实现类:
-
HashSet类
- 不保证Set顺序,允许使用null元素
-
TreeSet类
-
不仅实现Set接口,还是先java.util.SortedSet接口。
-
TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可按照指定比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
-
新增方法:
-
package com.JiHeLei; import java.util.*; public class UpdateStu implements Comparable { String name; long id; public UpdateStu(String name,long id){ //构造方法 this.id=id; this.name=name; } public int compareTo(Object o){ UpdateStu upstu=(UpdateStu)o; int result=id>upstu.id?1:(id==upstu.id?0:-1); return result; } //创建UpdateStu对象实例 public static void main(String[] args) { UpdateStu stu1 = new UpdateStu("李同学", 01011); UpdateStu stu2 = new UpdateStu("陈同学", 01021); UpdateStu stu3 = new UpdateStu("王同学", 01051); UpdateStu stu4 = new UpdateStu("马同学", 01012); TreeSet tree = new TreeSet(); tree.add(stu1); tree.add(stu2); tree.add(stu3); tree.add(stu4); //Set集合中的所有对象的迭代器 Iterator it = tree.iterator(); System.out.println("Set集合中的所有元素:"); while(it.hasNext()){ UpdateStu stu=(UpdateStu)it.next(); System.out.println(stu.name+""+stu.id); } it=tree.headSet(stu2).iterator();//截取排在stu2对象之前的对象 System.out.println("截取前面部分的集合:"); while(it.hasNext()){ UpdateStu stu=(UpdateStu)it.next(); System.out.println(stu.name+""+stu.id); } it=tree.subSet(stu2,stu3).iterator();//截取排在stu2与stu3对象之前的对象 System.out.println("截取前面部分的集合:"); while(it.hasNext()){// UpdateStu stu=(UpdateStu)it.next(); System.out.println(stu.name+""+stu.id); } } }
-
存入TreeSet类实现的Set集合必须实现Comparabe接口,该接口中的comparaTo(Object o)方法比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零、正整数。
-
-
headSet()、subSet()、tailSet()截取对象,指定参数位于起始位置则包含,位于终止位置则不包含。
-
14.5Map集合
-
没有继承Collection接口,提供key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。
-
包括Map接口以及Map接口的所有实现类
-
14.5.1Map接口
-
package com.JiHeLei; import java.util.*; public class UpdateStuMap { public static void main(String[] args){ Map map=new HashMap(); map.put("01","李同学"); map.put("02","魏同学"); Set set=map.keySet();//构建Map集合中所有key对象的集合 Iterator it=set.iterator();//创建集合迭代器 System.out.println("Key集合中的所有元素:"); while(it.hasNext()){ System.out.println(it.next()); } Collection coll=map.values(); it=coll.iterator(); System.out.println("Value集合中的所有元素:"); while(it.hasNext()){ System.out.println(it.next()); } } }
-
map.put("05",null);//Map集合中允许值对象是null,而且没有个数限制
-
14.5.2Map接口的实现类
-
实现类有:
-
HashMap类
- 基于哈希表的Map接口实现。
- 允许使用null值和null键,但必须保证键的唯一性——只允许有一个null键
- 对于添加和删除映射关系的效率更高
- 不保证映射的顺序,不保证该顺序恒久不变
-
TreeMap类
- 不仅实现Map接口,还是先java.util.SortedMap接口。映射关系具有顺序
- 不允许键对象是null
-
可通过HashMap类创建Map集合,当需要顺序输出时再创建一个完成相同映射关系的TreeMap
-
package com.JiHeLei; import java.util.*; public class MapTest { public static void main(String[] args){ Map map=new HashMap(); //创建Emp对象 Emp emp=new Emp("001","张三"); Emp emp2=new Emp("005","李四"); Emp emp3=new Emp("004","王一"); //将对象添加到集合中 map.put(emp.getE_id(),emp.getE_name()); map.put(emp2.getE_id(),emp2.getE_name()); map.put(emp3.getE_id(),emp3.getE_name()); //获取Map集合中的key对象集合 Set set=map.keySet(); Iterator it=set.iterator(); System.out.println("HashMap类实现的Map集合,无序:"); while(it.hasNext()){ String str=(String)it.next(); String name=(String)map.get(str); System.out.println(str+""+name); //下面的方法为何不行? //Emp empp=(Emp)it.next(); //System.out.println(empp.getE_id()+""+empp.getE_name()); } //利用TreeMap实现上述功能 TreeMap treemap=new TreeMap(); treemap.putAll(map);//向集合添加对象 Iterator iter=treemap.keySet().iterator(); System.out.println("TreeMap类实现的Map集合,键对象升序:"); while(iter.hasNext()) { String str = (String) iter.next(); String name = (String) map.get(str); System.out.println(str + "" + name); } } }
-