Java进阶——集合

发布时间:2026/5/20 9:45:10

Java进阶——集合 集合集合分为单列集合(Collection)和双列集合(Map)单列集合在添加数据时每次只添加一个数据双列集合每次在添加数据时每次添加一对集合。collection分类List系列集合的特点添加元素是有序、可重复、有索引有序:指的是存取的数据有序如存入的顺序是张三、李四、王五那么取出来的也是张三、李四、王五所以这里的有序与之前我们所认识的有序完全不同。可重复:表示集合中的元素是可以重复的。有索引可通过索引获取集合中的元素。Set系列集合添加的元素是无序、不重复、无索引恰恰与List集合完全相反无序是指的存和取的顺序有可能不一样的顺序随机。不重复表示集合中不能存储重复的元素所以以后可以利用Set集合的特性进行数据去重。无索引不能通过索引来获取集合中的每个元素。Collection:是单列集合的祖宗接口它的功能是全部单列集合都可以继承使用的。Collection是个接口所以不能直接创建对象Collection中常用的方法代码示例:package MyCollection; ​ import java.util.ArrayList; import java.util.Collection; ​ public class Demo01 { public static void main(String[] args) { //目的为了学习Collection接口里面的方法 CollectionString list new ArrayList();//相当于多态 //1.添加元素 //1.添加元素 //细节1:如果我们要往List系列集合中添加数据那么方法永远返回true, 因为List系列的是允许元素重复的 //细节2:如果我们要往Set系列集合中添加数据如果当前要添加元素不存在 方法返回true 表示添加成功。 // 如果当前要添加的元素已经存在方法返回false表示添加失败 // 因为Set系列的集合不允许重复。 list.add(aaa); list.add(bbb); list.add(ccc); System.out.println(list);//[aaa, bbb, ccc] ​ //clear():清空集合 list.clear(); System.out.println(list);//[] ​ //remove():删除集合中的元素 //细节1:如果要删除的元素不存在方法返回false表示删除失败 //细节2:如果要删除的元素存在方法返回true表示删除成功 //细节3:如果要删除的元素存在方法删除的是第一个元素后续的元素会往前移动 //注意:因为Collection里面定义的是共性的方法 所以此时不能通过索引进行删除。只能通过元素的对象进行删除。 list.remove(aaa); System.out.println(list);//[bbb, ccc] ​ //contains():判断集合中是否包含指定的元素 //细节1:如果集合中包含指定的元素方法返回true //细节2:如果集合中不包含指定的元素方法返回false //细节:底层是依赖equals方法进行判断是否存在的。 //所以如果集合中存储的是自定义对象也想通过contains方法来判断是否包含 那么在javabean类中一定要重写equals方法。 System.out.println(list.contains(bbb));//true System.out.println(list.contains(ddd));//false ​ //isEmpty():判断集合是否为空 //细节1:如果集合中没有元素方法返回true 表示集合为空 //细节2:如果集合中有元素方法返回false 表示集合不为空 System.out.println(list.isEmpty());//true ​ //size():获取集合中元素的个数 list.add(ffff); list.add(sss); System.out.println(list.size());//2 ​ } } ​以上代码示例中的remove方法和contains方法是基于排除前面已经执行的clear方法的情况会得到的结果。正常情况应该为[],false,false。contians方法在自定义类中使用的方法分析。以上图中使用contians来判断元素是否存在结果返回false。因为contains方法在底层依赖equals方法判断对象是否一致的。如果存的是自定义对象没有重写equals方法 那么默认使用object类中的equals方法进行判断 而object类中equals方法依赖地址值进行判断。需求如果同姓名和同年龄就认为是同一个学生。所以需要在自定义的Javabean类中重写equals方法就可以了。迭代器Collection的遍历方式迭代器遍历增强for遍历Lambda表达式遍历迭代器遍历迭代器不依赖索引它在java中的类是Iterator,迭代器是集合专用的遍历方式。package Diedaiqi; ​ import java.util.ArrayList; import java.util.Iterator; ​ public class Demo01 { public static void main(String[] args) { CollectionString list new ArrayList(); //创建一个ArrayList集合 list.add(aa); list.add(bb); list.add(cc); list.add(dd); //迭代器好比一个箭头默认指向集合的0索引处。 IteratorString it list.iterator(); //获取一个迭代器对象 boolean flag it.hasNext();//判断当前位置是否有元素 String str it.next();//获取当前位置的元素 System.out.println(str); //由上面的变形而来 //通过循环来遍历集合中的所有元素 while(it.hasNext()){ str it.next();//获取当前元素并移动指针 System.out.println(str); } } } ​细节细节注意点:报错NoSuchElementException //当指针指向没有元素的位置时不可以调用next方法否则就会报错。迭代器遍历完毕指针不会复位//当使用迭代器后遍历完成指针不会回到0索引的位置所以要再次获取集合元素需要再获取一个新的迭代器。循环中只能用一次next方法。//循环中不可以多次调用next方法如果需要使用某个元素可以把获取的元素赋值个一个变量。如上图所示如果在一个循环里面使用两个next方法时当集合元素个数为奇数时当指针指向最后一个元素时循环判断当前位置有元素进入循环那么调用的第一个next方法会获取最后一个元素并移动指针到下一个位置那么此时下一个位置没有元素所以调用第二个next方法就会报错NoSuchElementException 。因此在循环中最好只使用一个next方法。迭代器遍历时不能用集合的方法进行增加或者删除。如果在迭代器遍历时使用了集合的方法进行添加或删除程序会报错ConcurrentModificationException并发修改异常如果实在要删除:那么可以用迭代器提供的remove方法进行删除。如果要添加暂时没有办法。

相关新闻