集合
简称集,是用来存储多个元素的容器
集合和数组的区别
元素类型:
集合:引用数据类型(存储基本类型时自动装箱)
数组:基本数据类型、引用类型
元素个数:
集合:不固定,可任意扩容
数组:固定,不可改变容量
不受容器大小限制,可以随时添加、删除元素
提供了大量操作元素的方法(判断,获取等)
Java的集合体系
单列集合(Collection)
List:ArrayList
Set:HashSet
双列集合(Map:key,value)
Map:HashMap
List集合:
特点:可重复、有序(存取顺序相同)
命令:List list = new ArrayList();
向集合中添加元素的方法:add()
遍历集合的方法:for循环
获得集合中的某个元素:.get()
获取集合中元素个数的方法:size()
增强for循环:
for(object o :list){System.out.println(o);}
即遍历集合输出
迭代器(Iterator)
对过程的重复,称为迭代
迭代器是遍历Collection集合的通用方式。可以在集合遍历的同时进行添加、删除操作。
常用方法
next():返回迭代的下一个元素对象
hasNext():如果仍有元素可以迭代,则返回true
列表迭代器(ListIterator)是List体系独有的遍历方式,可以在集合遍历的同时进行添加、删除等操作。
但是必须通过调用列表迭代器的方式来实现
**泛型
**
即泛指任意类型,又叫参数化类型。用来限制集合的元素类型
如list的添加list.add()是不受限制的,可以是任意数据类型,用泛型限制后,就只能添加某一种数据类型的元素
如List list = new ArrayList<>(); //只能添加String类型的元素
Collections工具类
针对集合进行操作的工具类
成员方法:
1)sort(List)根据元素的自然顺序,将指定列表按升序排序
2)max(Collection)返回集合的最大元素
3)reverse(List)反转List集合元素
4)shuffle(List)使用默认的随机源随机置换指定的列表(打乱)
Set集合
不可重复、无序
多次添加会自动依据equals()和hashCode()两种方法去重
package cn.iproute.demo1;import java.util.Objects;public class Student {private int id;private String name;//无参构造与全参构造//get与set方法//toString方法//equals与hashCode方法 ... }
package cn.iproute.demo1;import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class Test {public static void main(String[] args) {Set<Student> set = new HashSet<>();Student s1 = new Student(1,"张三");Student s2 = new Student(2,"李四");Student s3 = new Student(3,"王二");Student s4 = new Student(3,"王二");set.add(s1);set.add(s2); //多次添加会自动依据equals()和hashCode()两种方法去重set.add(s3);set.add(s4);Iterator<Student> it = set.iterator(); //使用迭代器来遍历while (it.hasNext()){Student s = it.next();System.out.println(s);}System.out.println(set);for (Student student : set) {System.out.println(student); //打印顺序与添加顺序并不相同}}}
Map集合
双列集合,元素由键值对( Entry )构成
key 不可以重复, value 可以重复
向map集合中添加元素的方法为: put()
遍历集合的方式:
获取所有的key : keySet()遍历 keySet ,通过 key 获取 value : get()
遍历 keySet 的方法: iterator()
package cn.iproute.demo1;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class Test {public static void main(String[] args) {Map<Integer,Student> map = new HashMap<>();Student s1 = new Student(1,"张三");Student s2 = new Student(2,"李四");Student s3 = new Student(3,"张三");System.out.println(map.put(1,s2)); //利用键去覆盖数值的时候会返回被覆盖的值System.out.println(map.put(1,s1));map.put(2,s2);map.put(3,s3);System.out.println(map);Set<Integer> keys = map.keySet(); //获取map中的key,组成一个set集合Iterator<Integer> it = keys.iterator(); //将set集合变为一个迭代器while (it.hasNext()){ //遍历key组成的迭代器Integer key = it.next();System.out.println("key:"+ key +" value:"+map.get(key)); //打印结果}for (Integer integer : map.keySet()) { //使用for遍历所有的keySystem.out.println(map.get(integer));}for (Student value : map.values()) { //使用for遍历所有的valueSystem.out.println(value);}}}
