在Java中可以通过数组保存多个对象,但某些情况下开发人员无法确定需要保存的数组长度,此时数组将不再适用,因为数组的长度是不变的。为了保存数目不确定的数据,JDK提供了一系列特殊的类,这些类可以存储任意类型的数据,并且长度可变,,在java中这些类统称为集合。集合类都位于java.util包中。
List列表特点
有序集合(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。可以简单的理解成和数组的使用方式差不多 , 存储到List中的数据有顺序的 并且可以通过索引编号对其进行操作
ArrayList集合底层体现出来的数据结构是数组。对此集合的操作其实还是对数组的操作。
Linkedlist集合底层体现出来的数据结构是链表。
ArrayList集合常用方法
LinkedList集合常用方法
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,他有两个重要的子接口Set和List。
List特点是元素有序、可重复。
在List集合中,允许出现重复元素,所有的元素都是以一种线性的方式进行存储的,在程序中可通过索引来访问集合中指定的元素,List集合另一特点是元素有序,即元素的存入顺序和取出顺序一致。主要实现类:ArrayList、LinkedList 。
Set特点元素无序、元素不可重复。主要实现类:HashSet、TreeSet.
Set接口中的元素是无序的,并且会以为某种规则保证存入的元素不重复。
HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向 HashSet 集合中添加一个对象时,首先会调用该对象的 hashCode ()方法来计算对象的哈希值,从而确定元素的存储位置。如果此时哈希值相同,再调用对象的 equals ()方法来确保该位置没有重复元素。 Set 集合与 List 集合存取元素的方式都一样(存取关键字基本一致)。
Map:双列集合的根接口,用于存储具有键(key)、值(value)映射关系的元素,每个元素都包含一对键值,可以通过指定的键找到对应得值。
Map接口的主要实现类:HashMap、TreeMap。
ArrayList a1 = new ArrayList(); a1.add(1); a1.add("张三"); a1.add(3.14); //在指定位置添加数据 a1.add(1,"李四"); ArrayList a2 = new ArrayList(); //再指定位置后一次添加多个 //a2.addAll(2,a1); //一次添加多个 a2.addAll(a1); a2.add(99); //获取指定下标的元素 Object v = a2.get(2); System.out.println(v); //获取数组长度 int l = a2.size(); System.out.println(l); //判断数据是否存在,返回布尔值 boolean b = a2.contains("李四"); System.out.println(b); //寻找指定数据第一次出现的位置 int l2 = a2.indexOf("张三"); System.out.println(l2); //删除指定数据 a2.remove("张三"); //删除指定下标的数据 // a2.remove(5); //以字符串形式打印数组 System.out.println(a2.toString()); //清空数组 //a2.clear(); //更改数据 a2.set(1,"李五"); //获取数组长度 int c = a2.size(); System.out.println(c); System.out.println(a2.isEmpty());
LinkedList l = new LinkedList(); l.add("张三"); l.add("张4"); l.add("张5"); l.add("张6"); l.add("张7"); l.add("张8"); l.add("张10"); LinkedList l2 = new LinkedList(); l2.addAll(l); l2.add(6,"张9"); System.out.println(l2); l2.addFirst("张2"); l2.addLast("张11"); System.out.println(l2); //l2.remove("张三"); //l2.removeLast(); //l2.removeFirst(); l2.getFirst(); l2.getLast(); l2.indexOf("张四"); boolean b1 = l2.isEmpty(); boolean b2 = l2.contains("张8"); l2.peek(); l2.peekFirst(); l2.peekLast(); //System.out.println(e);