List接口当中的常用API方法:增删改查
出了继承Collection接口当中的方法外,还增加了一些根据元素索引来操作集合的特定方法:
-
public void add(int index,E element):将指定的元素,添加到给定集合中的指定位置上
-
public E get(int index):根据指定的索引获取对应位置上的元素
-
public E remove(int index):通过索引删除索引对应位置上的元素
-
public E set(int index,E element) :在指定索引位置上替换成给定的元素,并且返回更新前的元素。
LinkedList集合数据存储的结构采用的是链表结构。方便元素的添加和删除操作。
此外 【LinkedList是一个双向链表】,特点:增删快,查询慢,在LinkedList集合当中,封装了大量的关于首节点和尾节点的元素操作的方法。
-
-
public void addLast(E e):将指定的元素插入到尾结点的位置上
-
public E getFirst():获取首节点的元素
-
public E getLast():获取尾结点的元素
-
public E removeFirst():删除首节点元素
-
public E removeLast():删除尾结点的元素
-
public E pop():从次列表所表示的堆栈当中弹出一个元素。
-
public void push(E e):将元素推入到此列表所表示的堆栈当中
-
LinkedList是List的子类,List当中的方法LinkedList都是可以使用的。我们只了解LinkedList独有的方法,
在开发当中,LinkedList集合也可以作为堆栈、队列结构使用(了解)
Set<Integer> set=new HashSet<>(); //set没有索引,可以用迭代器和增强for循环遍历。相同元素只能添加一次 set.add(563); set.add(153); set.add(323); set.add(563); set.add(546); for (Integer b : set) { System.out.print(b+" ");//546 563 323 153 集合无序 }
java.util.HashSet
是Set接口的一个实现类,它存储的元素是不可重复的,并且元素都是无序的(存取顺序不一致)。
java.util.HashSet
底层的实现其实是一个java.util.HashMap
支持的。
HashSet
是根据对象的哈希值来确定元素在集合当中的存储位置,因此它具有良好的存取和查找性能。保证元素唯一性的方式依赖于hashCode
和equals
方法
哈希值:是一个十进制的整数,由系统随机给出(对象地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的物理地址)
是顶级父类Object中的方法,可以获取对象的哈希值:int hashCode返回对象的哈希码值
源码:public native int hashCode();
native:调用本地操作系统中的方法
HashSet集合存储数据的结构(哈希表)
JDK1.8之前:哈希表=数组+链表
JDK1.8之后:
哈希表=数组+链表 数组初始容量16
哈希表=数组+红黑树; 如果链表长度超过了8位,那么就会把链表换成红黑树,减少查找时间
一般需要重写对象当中的hashCode和equals方法,建立自己的比较方式。才能保证HashSet集合中元素的唯一性。
@Override public boolean equals(Object o) { if (o == null) { return false; } if (this == o) { return true; } // 向下转型 类型判断 if (o instanceof Student) { Student student = (Student)o; // 同名同年龄的人为同一个人 true return student.getName().equals(name) && student.getAge() == age; } return false; } @Override public int hashCode(){ // 使用Objects类中的hash方法 return Objects.hash(name,age); }
底层是一个哈希表(数组+链表、红黑树)+链表 :多了条链表(存元素的存储的顺序),从而使元素有序
LinkedHashSet<String> linked = new LinkedHashSet<>(); linked.add("ass"); linked.add("滴滴"); linked.add("来了"); linked.add("宝贝"); System.out.println(linked);//[ass, 滴滴, 来了, 宝贝]