集合
简称集,是用来存储多个元素的容器
集合和数组的区别
元素类型:
集合:引用数据类型(存储基本类型时自动装箱)
数组:基本数据类型、引用类型
元素个数:
集合:不固定,可任意扩容
数组:固定,不可改变容量
不受容器大小限制,可以随时添加、删除元素
提供了大量操作元素的方法(判断,获取等)
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遍历所有的key
System.out.println(map.get(integer));
}
for (Student value : map.values()) { //使用for遍历所有的value
System.out.println(value);
}
}
}