集合是java中提供的大小可变的容器。
集合和数组的区别:
数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储任意类型数据。集合存储的都是引用数据类型。如果想存储基本类型数据需要存储对应的包装类型。 2 集合类的继承体系
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。
List的特点是元素有序、元素可重复、有索引(可通过索引遍历集合)。
ArrayList:集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
LinekdList:集合数据存储的结构是双向链表结构。方便元素添加、删除的集合(增删首尾元素尤其快)。在开发时,linkedList集合也可以作为堆栈,队列的结构使用。
Vector:和 ArrayList 类似,它是线程安全的,但性能略差。Set的特点是元素不可重复、无索引(不可通过索引遍历集合)。
HashSet:添加的元素是无序,不重复,无索引的。根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存储和查找性能。依赖hashCode与equals方法保证元素唯一性。
linkedHashSet:添加的元素是有序,不重复,无索引的。
TreeSet:不重复,无索引,按照大小默认升序排序。
Collection继承体系:
Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法。如下所示:
public boolean add(E e): 把给定的对象添加到当前集合中 。public void clear() :清空集合中所有的元素。public boolean remove(E e): 把给定的对象在当前集合中删除。public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。public boolean isEmpty(): 判断当前集合是否为空。public int size(): 返回集合中元素的个数。public Object[] toArray(): 把集合中的元素,存储到数组中(可以通过String[]::new指定返回数组的类型为String) 4 Collection 的三种遍历方式
Collection集合的遍历方式是全部集合都可以直接使用的。
Collection集合的遍历方式有三种:
迭代器Iteratorforeach(增强for循环)JDK 1.8开始之后的新技术Lambda表达式 4.1 Iterator迭代器
JDK专门提供了一个接口java.util.Iterator用于遍历集合中的所有元素。
public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。
Iterator接口的常用方法如下:
public E next():返回迭代的下一个元素。public boolean hasNext():如果仍有元素可以迭代,则返回 true。
代码示例:
public static void main(String[] args) { Collectioncoll = new ArrayList (); coll.add("张三"); coll.add("李四"); coll.add("王五"); //使用迭代器遍历。每个集合对象都有自己的迭代器。 //泛型指的是迭代出元素的数据类型 Iterator it = coll.iterator(); while(it.hasNext()){ //判断是否有迭代元素 String s = it.next();//获取迭代出的元素 System.out.println(s); } }
4.2 增强for循环tips:
在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出java.util.NoSuchElementException没有集合元素异常。在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出ConcurrentModificationException并发修改异常.
foreach是一种遍历形式,可以遍历集合或者数组。
优点:foreach遍历集合实际上是迭代器遍历的简化写法。
缺点:foreach遍历无法知道遍历到了哪个元素了,因为没有索引。
代码示例:
public static void main(String[] args) { Collection4.3 Lambda表达式lists = new ArrayList<>(); coll.add("张三"); coll.add("李四"); coll.add("王五"); for (String ele : lists) { System.out.println(ele); } int[] ages = new int[]{17 , 18 , 38 , 21}; for (int age : ages) { System.out.println(age); } }
public static void main(String[] args) { Collectionlists = new ArrayList<>(); coll.add("张三"); coll.add("李四"); coll.add("王五"); System.out.println(lists); lists.forEach(s -> { System.out.println(s); }); // 简化版本(1) lists.forEach(s -> System.out.println(s)); // 简化版本(2) lists.forEach(System.out::println); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)