集合和数组的区别
- 元素类型
- 集合:引用类型(存储基本类型时自动装箱)
- 数组:基本类型、引用类型
- 元素个数
- 集合:不固定,可任意扩容
- 数组:固定,不能改变容量
- 集合的好处
- 不受容器大小限制,可以随时添加、删除元素
- 提供大量的操作元素的方法(判断、获取等)
Java集合体系
- 单列集合(Collection)
- List:ArrayList
- Set:HashSet
- 双列集合(Map : key,value)
- Map:HashMap
- List、Set、Map都是接口,后面的才是实现类
使用集合的步骤
- 创建集合对象
- 创建元素对象
- 将元素对象添加到集合对象中
- 遍历集合
List集合的特点和应用
-
特点:
- 可重复、有序(存取顺序相同)
-
应用:
List list = new ArrayList();
public static void main(String[] args) { //创建集合对象 List list = new ArrayList(); //创建元素对象 Student s1 = new Student("rentao",22); Student s2 = new Student("ruilin",21); Student s3 = new Student("xinquan",23); //将元素对象添加到集合对象中 list.add(s1); list.add(s2); list.add(s3); //获取索引为2的元素 Object object = list.get(2); //System.out.println(object); //获取集合的长度 size System.out.println(list.size()); //遍历集合 for (int i = 0; i < list.size(); i++) { } }
增强for循环和迭代器
为了简化数组和集合的遍历
for(数据类型 变量名 : 数组或者集合对象){ //循环体 ,变量即元素 }
快捷方式:iter+enter
public static void main(String[] args) { //创建集合对象 List list = new ArrayList(); //将元素对象添加到集合对象中 list.add(10); list.add(10); list.add(20); list.add(30); list.add(40); //遍历集合 for(Object obj : list){ //obj是集合中的元素,其本身应该为int类型的元素 Integer ii = (Integer)obj; System.out.println(ii); } //快捷键 iter 然后按回车即可 for (Object o : list) { } }
增强for就是迭代器的简写形式
为什么需要迭代器?对过程的重复称为迭代
迭代器是遍历Collection集合的通用方式,可以在对集合遍历的同时进行添加、删除等操作
-
迭代器常用方法
- next():返回迭代的下一个元素对象
- hasNext():如果仍有元素可以迭代,则返回true
-
迭代器的基本使用
public static void main(String[] args) { //创建集合对象 List list = new ArrayList(); //将元素对象添加到集合对象中 list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); //遍历集合 //迭代器使用步骤 //1.根据集合对象获取其对象的迭代器对象 Iterator it = list.iterator(); //2.判断迭代器中是否有元素 while(it.hasNext()){ //如果有元素就一直迭代 //3.如果有就获取元素 // Object obj = it.next(); String s = (String)it.next(); System.out.println(s); } }
列表迭代器(ListIterator) 下面的需求用普通的迭代器完成不了
需求:判断集合中如果有字符串”b“,就在其后方添加一个字符串java public static void main(String[] args) { //创建集合对象 List list = new ArrayList(); //将元素对象添加到集合对象中 list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); ListIterator lit = list.listIterator(); while(lit.hasNext()){ String s = (String)lit.next(); if("b".equals(s)){ lit.add("java"); } } System.out.println(list); }
Collections工具类
- 针对集合进行操作的工具类
- 成员方法:
- sort(List<T>):根据元素自然顺序,将指定列表按升序排序
- max(Collection<T>):返回集合的最大元素
- reverse(List<T>):反转List集合中的元素
- shuffle(List<T>):使用默认的随机源随机置换指定的列表
Integer max = Collections.max(list)
Set集合的特点和应用
-
特点
- 不可重复
- 无序
-
应用
Set<T> set = new HashSet<>();
public class Test { public static void main(String[] args) { //创建集合对象 Set<Student> set = new HashSet<>(); //创建元素对象 Student s1 = new Student("乔峰", 41); Student s2 = new Student("虚竹", 41); Student s3 = new Student("段誉", 41); Student s4 = new Student("乔峰", 41); Student s4 = new Student("虚竹", 41); //将元素对象添加到集合对象中 set.add(s1); set.add(s2); set.add(s3); set.add(s4); //遍历集合 //五个全部打印出来,为什么呢? System.out.println(set); /* 为什么Set集合没有“去重”? 因为Set集合保证元素的唯一性依赖:equals()和hashCode()两个方法。 你没有在Student类中重写这两个方法,默认调用的是Object类中的两个方法 而Object类中的equals()方法默认比较的是地址是否相同 解决方案: 在Student类中重写equals()和hashCode()方法 */ System.out.println("======================"); //通过迭代器遍历集合 Iterator<Student> it = set.iterator(); while(it.hasNext()){ Student s = it.next(); System.out.println(s); } System.out.println("======================"); //通过增强for遍历集合 for (Student student : set ) { System.out.println(student); } } }
Map集合的特点和应用
-
特点:
- 双列集合,元素由键值对构成:key-value
- key不可以重复,但是value可以重复
Map<T1,T2> map = new HashMap<>();
添加元素:put( )
-
遍历集合的方式:
- 获取所有的key : keySet()
- 遍历keySet的方法:iterator()
-
步骤:
- 创建集合对象:
Map<Integer , Student> map = new HashMap<>();
- 分别创建三个Student对象
- 使用put方法将Student对象添加到集合中
- 通过key分别获取对应的value并打印
- 创建集合对象:
public class Test { public static void main(String[] args) { //创建集合对象:`Map<Integer , Student> map = new HashMap<>();` Map<Integer , Student> map = new HashMap<>(); //分别创建三个Student对象 Student s1 = new Student("zhangsan",23); Student s2 = new Student("lisi",23); Student s3 = new Student("zhangsan",23); //使用put方法将Student对象添加到集合中 map.put(1,s1); map.put(2,s2); map.put(3,s3); //通key分别获取对应的value并打印 Student stu2 = map.get(2); System.out.println("=================="); //遍历集合步骤 //1.获取所有键的集合 keySet() Set<Integer> keys = map.keySet(); //2.遍历所有键,获取到没一个键 迭代器 增强for Iterator<Integer> it = keys.iterator(); while (it.hasNext()){ Integer key = it.next(); //3.根据键,获取指定的值 get() Student value = map.get(key); System.out.println("value"); } } }