集合【LinkedList、HashSet、Collection集合体系】

java.util.List(集合)接口 extends Collection(集合) 接口
List集合的特点:
1.有序的集合:存入元素的顺序,和取出元素的顺序是一致的(存入:1,2,3 取出:1,2,3)
2.允许有重复的元素
3.有索引
特有的方法:包含索引的方法
add(int index, E e)在指定的索引上添加元素
E remove(int index)移除并返回,指定索引上的元素
E set(int index, E e) 修改并返回值指定索引上的元素
E get(int index) 返回列表中指定位置的元素。

注意:
操作索引,一定不要索引越界,否则会报索引越界异常
IndexOutOfBoundsException:索引越界异常(集合会报)
StringIndexOutOfBoundsException:字符串索引越界异常
ArrayIndexOutOfBoundsException:数组索引越界异常

E set(int index, E e) 修改并返回值指定索引上的元素
List<Double> list
Double set(int index, E e) 修改并返回值指定索引上的元素

E remove(int index)移除并返回,指定索引上的元素
List<Integer> list
Integer remove(int index)移除并返回,指定索引上的元素


add(int index, E e)在指定的索引上添加元素
List<String> list
add(int index, String e)在指定的索引上添加元素

java.util.LinkedList集合 implements List 接口
LinkedList集合是一个双向链表:可以保证迭代顺序(有序集合)

LinkedList集合有大量操作首尾的方法,要使用LinkedList中特有的方法,不能使用多态
E removeFirst() 移除并返回此列表的第一个元素。
E pop() 移除并返回此列表的第一个元素。 此方法等效于 removeFirst()。
E removeLast() 移除并返回此列表的最后一个元素。

E getFirst() 返回此列表的第一个元素。
E getLast() 返回此列表的最后一个元素。
boolean isEmpty() 如果列表不包含元素,则返回 true。
//linked.clear();
为了防止NoSuchElementException没有元素异常
获取元素之前,增加一个非空判断
boolean isEmpty() 如果列表不包含元素,则返回 true。
void addFirst(E e) 将指定元素插入此列表的开头。
void push(E e) 将该元素插入此列表的开头。 此方法等效于 addFirst(E)。
void addLast(E e) 将指定元素添加到此列表的结尾。相当于 add(E e)

使用List存储的数据结构
堆栈:先进后出
队列:先进先出
数组:查询快,增删慢
链表:查询慢,增删快

java.util.Set集合 extends Collection集合
Set集合的特点:
1.没有索引,不能使用普通for遍历
2.不能存储重复的元素

java.util.HashSet集合 implements Set集合
HashSet集合的特点:
1.没有索引,不能使用普通for遍历
2.不能存储重复的元素
3.是一个无序的集合(存入和元素和取出元素的顺序可能不一致)
4.底层是一个哈希表(数组+链表):即增删快,又查询快


哈希值:是一个十进制的整数,由操作系统随机给出
使用Object类中的方法hashCode获取
int hashCode() 返回该对象的哈希码值。

getClass().getName() + '@' + Integer.toHexString(hashCode())
使用反射获取类名 + @ + 把十进制的hashCode变为十六进制的值

重写Object类的hashCode方法
public native int hashCode();
发现hashCode上有一个native,调用了操作系统本身的方法,获取哈希值

使用HashSet集合存储字符串
HashSet集合保证元素唯一的方法:
1.元素重写hashCode方法
2.元素重写equals方法

String类,即重写hashCode又重写了equals(比较的是字符串的每个字符是否相同)

java.util.LinkedHashSet extends HashSet implements Set
LinkedHashSet集合:哈希表+链表(基于链表的哈希表)
LinkedHashSet集合是一个双向链表可以保证迭代顺序


使用HashSet集合存储自定义类型
要求:同名和同年龄的人视为同一个人,只能存储一次
HashSet集合保证元素唯一的方法:
1.元素重写hashCode方法
2.元素重写equals方法

ArrayList的contains方法判断元素是否重复原理
每添加一个元素元素的时候,先使用 contains方法判断集合中是否包含该元素
如果不包含,在添加到集合中
使用HashSet集合过滤ArrayList集合中的重复元素

 1 private static void method_01() {
 2         ArrayList<String> list = new ArrayList<String>();
 3         list.add("a");
 4         list.add("a");
 5         list.add("a");
 6         list.add("a");
 7         list.add("a");
 8         list.add("b");
 9         list.add("b");
10         list.add("b");
11         list.add("b");
12         System.out.println(list);
13         
14         //创建HashSet集合
15         HashSet<String> set = new HashSet<String>();
16         //遍历ArrayList集合
17         for (String s : list) {
18             //把元素添加到set中
19             set.add(s);
20         }
21         System.out.println(set);
22     }
原文地址:https://www.cnblogs.com/caigq/p/7049031.html