一.Java集合框架
Java的集合框架主要分为Collection和Map
下图可以看到集合框架的大致结构体系
二.List
通用方法
- void add(int index, E element):将指定元素添加到集合中的指定位置
- E get(int index):返回集合中指定位置的元素
- E set(int index, E element):将指定位置元素替换成指定元素
- E remove(int index):将指定位置的元素从集合中移除
1.ArrayList
ArrayList集合特点
基本特点
- 元素存储有序
- 带索引的集合
- 可以有重复元素
- 数组结构,查询快,增删慢
package com.learn.myCollection;
import java.util.ArrayList;
import java.util.List;
public class MyArrayList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
String s1 = new String("abc");
String s2 = new String("abc");
list.add(s1);
list.add(s2);
list.add("abc2");
System.out.println(list);
System.out.println("--------------------");
String str = list.get(2);
System.out.println(str);
System.out.println("--------------------");
list.set(2,"abc3");
System.out.println(list);
System.out.println("--------------------");
list.remove(2);
System.out.println(list);
}
}
2.LinkedList
LinkedList集合特点
基本特点
- 元素存储有序
- 带索引的集合
- 可以有重复元素
- 链表结构,查询慢,增删快
- 包含大量首尾操作
package com.learn.myCollection;
import java.util.LinkedList;
import java.util.List;
public class MyLinkList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
String s1 = new String("a");
String s2 = new String("a");
list.add(s1);
list.add(s2);
list.addFirst("b1");//首元素前添加
list.addLast("b2");//追加元素 相当于add
System.out.println(list);
String str = list.getFirst();//获取首元素
System.out.println(str);
str = list.getLast();//获取尾元素
System.out.println(str);
//get remove set 方法类似
}
}
3.Vector
vector它的功能和ArrayList差不多,但是它是线程安全的,所以性能肯定是没ArrayList好的。
三.Set
通用方法
- void add(int index, E element):将指定元素添加到集合中的指定位置
- E get(int index):返回集合中指定位置的元素
- E set(int index, E element):将指定位置元素替换成指定元素
- E remove(int index):将指定位置的元素从集合中移除
1.HashSet
基本特点
- 元素存储无序
- 不带索引
- 不可以有重复元素
- 数组+链表/红黑树 结构
- 不能使用普通的for循环遍历
package com.learn.myCollection;
import java.util.HashSet;
public class MyHashSet {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
String s1 = new String("abc");
String s2 = new String("abc");
set.add(s1);
set.add(s2);
set.add("重地");//重地和电话的hashCode相等
set.add("电话");
set.add("abc");
System.out.println(set);
}
}
2.LinkedHashSet
基本特点
- 元素存储有序
- 不带索引
- 不可以有重复元素
- 数组+链表/红黑树 和 链表 结构
- 不能使用普通的for循环遍历
LinkedHashSet 有序的原理
LinkedHashSet是继承HashSet的,它比HashSet多了一个链表结构就是为了记录存储顺序的
四.Map
1.HashMap
基本特点
- key-value结构
- key不能重复,value可以重复
- key不能为空,value可以为空
- 存储结构 数组+链表/红黑树
- 线程不安全
原理和hashSet差不多,都是通过hashCode取余分布在不同的数组下标上,初始的initialCapacity为16,就是数组的大小有16个。
当元素的hashCode求余后落到的数组上使有值的(hash冲突),这个时候我们就是使用到链表来将在他们连接起来放在同一个索引下边上。
当链表的大小大于8个的时候,这是我们的链表结构会转换为红黑树,加速链表的遍历(jdk1.8后新特性)
2.LinkedHashMap
基本特点
- key-value结构
- key不能重复,value可以重复
- key不能为空,value可以为空
- 存储结构 数组+链表/红黑树 和 链表
- 线程不安全
LinkedHashSet 有序的原理
LinkedHashMap是继承HashMap的,它比HashMap多了一个链表结构就是为了记录存储顺序的
3.HashTable
基本特点
- key-value结构
- key不能重复,value可以重复
- key不能为空,value不能为空
- 存储结构 数组+链表/红黑树
- 线程安全
五.结束
简单的讲了讲HashSet和HashMap,主要是面试的时候这两块问的比较的多,所以这两块写的比较详细,其他的了解下就好,记住他们的的特点,可以在什么时候使用。写的有点简单,有错有不够详细的请轻喷,我一定改。