一、引入
二、概述
三、Collection接口
1. 概述
2. 方法
2.1 添加
方法一 | 方法二 |
---|
add(Object obj) | addAll(Collection coll) |
2.2 获取有效元素的个数
2.3 清空集合
2.4 判断是否是空集合
|方法 |
|–|–|
| boolean isEmpty()
|
2.5 判断是否包含某个元素
方法一 | 方法二 |
---|
boolean contains(Object obj) | boolean containsAll(Collection c) |
2.6 删除
方法一 | 方法二 |
---|
boolean remove(Object obj) | boolean removeAll(Collection coll) |
2.7 取两个集合的交集
方法 |
---|
boolean retainAll(Collection c) |
2.8 判断集合是否相等
方法 |
---|
boolean equals(Object obj) |
2.9 转成对象数组
2.10 获取集合对象的哈希值
2.11 遍历
2.12 代码演示
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add("AA");
coll.add("BB");
coll.add(123);
coll.add(new Date());
System.out.println(coll.size());
Collection coll1 = new ArrayList();
coll1.add(456);
coll1.add("CC");
coll.addAll(coll1);
System.out.println(coll.size());
System.out.println(coll);
coll.clear();
System.out.println(coll.isEmpty());
}
@Test
public void test2(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
boolean contains = coll.contains(123);
System.out.println(contains);
System.out.println(coll.contains(new String("Tom")));
System.out.println(coll.contains(new Person("Jerry",20)));
Collection coll1 = Arrays.asList(123,4567);
System.out.println(coll.containsAll(coll1));
}
@Test
public void test3(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
coll.remove(1234);
System.out.println(coll);
coll.remove(new Person("Jerry",20));
System.out.println(coll);
Collection coll1 = Arrays.asList(123,456);
coll.removeAll(coll1);
System.out.println(coll);
}
@Test
public void test4(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
Collection coll1 = Arrays.asList(123,456,789);
coll.retainAll(coll1);
System.out.println(coll);
Collection coll2 = new ArrayList();
coll2.add(456);
coll2.add(123);
coll2.add(new Person("Jerry",20));
coll2.add(new String("Tom"));
coll2.add(false);
System.out.println(coll.equals(coll2));
}
@Test
public void test5() {
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry", 20));
coll.add(new String("Tom"));
coll.add(false);
System.out.println(coll.hashCode());
Object[] arr = coll.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
List<String> list = Arrays.asList(new String[]{"AA", "BB", "CC"});
System.out.println(list);
List arr1 = Arrays.asList(new int[]{123, 456});
System.out.println(arr1.size());
List arr2 = Arrays.asList(new Integer[]{123, 456});
System.out.println(arr2.size());
}
}
3. Collection子接口之一:List接口
3.1 概述
3.2 方法
| 方法|描述|
|–|–|–|
| void add(int index, Object ele)
|在index
位置插入ele
元素 |
| boolean addAll(int index, Collection eles)
|从index
位置开始将集合eles
中的所有元素添加进来
| Object get(int index)
|获取指定index
位置的元素 |
| int indexOf(Object obj)
|返回obj
在集合中首次出现的位置
| int lastIndexOf(Object obj)
|返回obj
在当前集合中末次出现的位置|
|Object remove(int index)
|移除指定index
位置的元素,并返回此元素 |
|Object set(int index, Object ele)
|设置指定index
位置的元素为ele
|
| List subList(int fromIndex, int toIndex)
|返回从fromIndex
到toIndex
位置的子集合 |
常用方法总结:
作用 | 方法 |
---|
增 | add(Object obj) |
删 | remove(int index) / remove(Object obj) |
改 | set(int index, Object ele) |
查 | get(int index) |
插 | add(int index, Object ele) |
长度 | size() |
遍历 | ①Iterator 迭代器方式 ② 增强for 循环 ③ 普通的循环 |
3.2.1 代码演示
@Test
public void test1(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add("AA");
list.add(new Person("Tom",12));
list.add(456);
System.out.println(list);
list.add(1,"BB");
System.out.println(list);
List list1 = Arrays.asList(1, 2, 3);
list.addAll(list1);
System.out.println(list.size());
System.out.println(list.get(0));
}
@Test
public void test2(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add("AA");
list.add(new Person("Tom",12));
list.add(456);
int index = list.indexOf(4567);
System.out.println(index);
System.out.println(list.lastIndexOf(456));
Object obj = list.remove(0);
System.out.println(obj);
System.out.println(list);
list.set(1,"CC");
System.out.println(list);
List subList = list.subList(2, 4);
System.out.println(subList);
System.out.println(list);
}
@Test
public void test3(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add("AA");
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
for(Object obj : list){
System.out.println(obj);
}
for(int i = 0;i < list.size();i++){
System.out.println(list.get(i));
}
}
3.3 List实现类之一:ArrayList
3.3.1 概述
3.3.2 源码分析
⭕ jdk 7:
ArrayList list = new ArrayList();
list.add(123);
ArrayList list = new ArrayList(int capacity)
⭕ jdk 8:
ArrayList list = new ArrayList();
list.add(123);
结论:jdk7中的ArrayList
的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList
的对象的创建类似于单例的懒汉式,延迟了数组的创建,节省内存。
3.4 List实现类之二:LinkedList

3.4.1 概述

3.4.2 源码分析
LinkedList list = new LinkedList();
list.add(123);
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
3.5 List实现类之三:Vector
3.5.1 概述
方法 |
---|
void addElement(Object obj) |
void insertElementAt(Object obj,int index) |
void setElementAt(Object obj,int index) |
void removeElement(Object obj) |
void removeAllElements() |
3.5.2 源码分析
3.6 ArrayList、LinkedList、Vector三者的异同?
4. Collection子接口之二:Set接口
4.1 概述
结论:重写equals方法的时候一般都需要同时复写hashCode方法。通常参与计算hashCode的对象的属性也应该参与到equals()中进行计算。
4.2 Set实现类之一:HashSet
4.2.1 概述
4.2.2 添加元素的过程
4.2.3 代码演示
@Test
public void test(){
Set set = new HashSet();
set.add(456);
set.add(123);
set.add(123);
set.add("AA");
set.add("CC");
set.add(new User("Tom",12));
set.add(new User("Tom",12));
set.add(129);
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
4.3 Set实现类之二:LinkedHashSet
4.3.1 概述
4.3.2 代码演示
@Test
public void test(){
Set set = new LinkedHashSet();
set.add(456);
set.add(123);
set.add(123);
set.add("AA");
set.add("CC");
set.add(new User("Tom",12));
set.add(new User("Tom",12));
set.add(129);
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}

4.4 Set实现类之三:TreeSet
4.4.1 概述
4.4.2 排序—自然排序
4.4.3 排序—定制排序
4.4.4 代码演示
@Test
public void test(){
Comparator com = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof User && o2 instanceof User){
User u1 = (User)o1;
User u2 = (User)o2;
return Integer.compare(u1.getAge(),u2.getAge());
}else{
throw new RuntimeException("输入的数据类型不匹配");
}
}
};
TreeSet set = new TreeSet(com);
set.add(new User("Tom",12));
set.add(new User("Jerry",32));
set.add(new User("Jim",2));
set.add(new User("Mike",65));
set.add(new User("Mary",33));
set.add(new User("Jack",33));
set.add(new User("Jack",56));
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
@Test
public void test1(){
TreeSet set = new TreeSet();
set.add(new User("Tom",12));
set.add(new User("Jerry",32));
set.add(new User("Jim",2));
set.add(new User("Mike",65));
set.add(new User("Jack",33));
set.add(new User("Jack",56));
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
四、Map接口
1. 概述
2. Map中定义的方法
方法 | 描述 |
---|
Object put(Object key,Object value) | 将指定key-value 添加到(或修改)当前map 对象中 |
void putAll(Map m) | 将m 中的所有key-value 对存放到当前map 中 |
Object remove(Object key) | 移除指定key 的key-value 对,并返回value |
void clear() | 清空当前map 中的所有数据 |
方法 | 描述 |
---|
Object get(Object key) | 获取指定key 对应的value |
boolean containsKey(Object key) | 是否包含指定的key |
boolean containsValue(Object value) | 是否包含指定的value |
int size() | 返回map 中key-value 对的个数 |
boolean isEmpty() | 判断当前map 是否为空 |
boolean equals(Object obj) | 判断当前map 和参数对象obj 是否相等 |
方法 | 描述 |
---|
Set keySet() | 返回所有key 构成的Set 集合 |
Collection values() | 返回所有value 构成的Collection 集合 |
Set entrySet() | 返回所有key-value 对构成的Set 集合 |
作用 | 方法 |
---|
添加 | put(Object key,Object value) |
删除 | remove(Object key) |
修改 | put(Object key,Object value) |
查询 | get(Object key) |
长度 | size() |
遍历 | keySet() / values() / entrySet() |
2.1 代码演示
@Test
public void test1(){
Map map = new HashMap();
map.put(null,123);
}
@Test
public void test2(){
Map map = new HashMap();
map = new LinkedHashMap();
map.put(123,"AA");
map.put(345,"BB");
map.put(12,"CC");
System.out.println(map);
}
@Test
public void test3(){
Map map = new HashMap();
map.put("AA",123);
map.put(45,123);
map.put("BB",56);
map.put("AA",87);
System.out.println(map);
Map map1 = new HashMap();
map1.put("CC",123);
map1.put("DD",123);
map.putAll(map1);
System.out.println(map);
Object value = map.remove("CC");
System.out.println(value);
System.out.println(map);
map.clear();
System.out.println(map.size());
System.out.println(map);
}
@Test
public void test4(){
Map map = new HashMap();
map.put("AA",123);
map.put(45,123);
map.put("BB",56);
System.out.println(map.get(45));
boolean isExist = map.containsKey("BB");
System.out.println(isExist);
isExist = map.containsValue(123);
System.out.println(isExist);
map.clear();
System.out.println(map.isEmpty());
}
@Test
public void test5(){
Map map = new HashMap();
map.put("AA",123);
map.put(45,1234);
map.put("BB",56);
Set set = map.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println();
Collection values = map.values();
for(Object obj : values){
System.out.println(obj);
}
System.out.println();
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "---->" + entry.getValue());
}
System.out.println();
Set keySet = map.keySet();
Iterator iterator2 = keySet.iterator();
while(iterator2.hasNext()){
Object key = iterator2.next();
Object value = map.get(key);
System.out.println(key + "=====" + value);
}
}
3. Map实现类之一:HashMap
3.1 概述
3.2 HashMap 的底层实现原理
⭕ jdk7:
⭕ jdk8
相较于jdk7
在底层实现方面的不同:
3.3 HashMap 源码中的重要常量
常量 | 描述 |
---|
DEFAULT_INITIAL_CAPACITY | HashMap 的默认容量,16 |
MAXIMUM_CAPACITY | HashMap 的最大支持容量,2^30 |
DEFAULT_LOAD_FACTOR | HashMap 的默认加载因子 |
TREEIFY_THRESHOLD | Bucket 中链表长度大于该默认值,转化为红黑树 |
UNTREEIFY_THRESHOLD | Bucket 中红黑树存储的Node 小于该默认值,转化为链表 |
MIN_TREEIFY_CAPACITY | 桶中的Node 被树化时最小的hash 表容量。(当桶中Node 的数量达到需要变红黑树时,若hash 表容量小于MIN_TREEIFY_CAPACITY 时,此时应执行resize 扩容操作这个MIN_TREEIFY_CAPACITY 的值至少是TREEIFY_THRESHOLD 的4倍。) |
table | 存储元素的数组,总是2的n次幂 |
entrySet | 存储具体元素的集 |
size | HashMap中存储的键值对的数量 |
modCount | HashMap扩容和结构改变的次数。 |
threshold | 扩容的临界值,=容量*填充因子 |
loadFactor | 填充因子 |
3.4 HashMap的存储结构:JDK 1.8之前
4. Map实现类之二:LinkedHashMap
4.1 概述
4.2 底层结构
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next; }
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before, after;
Entry(int hash, K key, V value, Node<K,V> next) {
super(hash, key, value, next);
}
}
5. Map实现类之三:TreeMap
5.1 概述
5.2 代码演示
public class TreeMapTest {
@Test
public void test1(){
TreeMap map = new TreeMap();
User u1 = new User("Tom",23);
User u2 = new User("Jerry",32);
User u3 = new User("Jack",20);
User u4 = new User("Rose",18);
map.put(u1,98);
map.put(u2,89);
map.put(u3,76);
map.put(u4,100);
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "---->" + entry.getValue());
}
}
@Test
public void test2(){
TreeMap map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof User && o2 instanceof User){
User u1 = (User)o1;
User u2 = (User)o2;
return Integer.compare(u1.getAge(),u2.getAge());
}
throw new RuntimeException("输入的类型不匹配!");
}
});
User u1 = new User("Tom",23);
User u2 = new User("Jerry",32);
User u3 = new User("Jack",20);
User u4 = new User("Rose",18);
map.put(u1,98);
map.put(u2,89);
map.put(u3,76);
map.put(u4,100);
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "---->" + entry.getValue());
}
}
}
6. Map实现类之四:Hashtable
6.1 概述
7. Map实现类之四:Properties
7.1 概述
Properties pros = new Properties();
pros.load(new FileInputStream("jdbc.properties"));
String user =pros.getProperty("user");
System.out.println(user);
7.2 代码演示
public class PropertiesTest {
public static void main(String[] args) {
FileInputStream fis = null;
try {
Properties pros = new Properties();
fis = new FileInputStream("jdbc.properties");
pros.load(fis);
String name = pros.getProperty("name");
String password = pros.getProperty("password");
System.out.println("name = " + name + ", password = " + password);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fis != null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
五、 Collections工具类
1. 概述
2. Collections工具类方法
方法 | 描述 |
---|
reverse(List) | 反转 List 中元素的顺序 |
shuffle(List) | 对 List 集合元素进行随机排序 |
sort(List) | 根据元素的自然顺序对指定 List 集合元素按升序排序 |
sort(List,Comparator) | 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序 |
swap(List,int, int) | 将指定 list 集合中的 i 处元素和 j 处元素进行交换 |
方法 | 描述 |
---|
Object max(Collection) | 根据元素的自然顺序,返回给定集合中的最大元素 |
Object max(Collection,Comparator) | 根据 Comparator 指定的顺序,返回给定集合中的最大元素 |
Object min(Collection) | 根据元素的自然顺序,返回给定集合中的最小元素 |
Object min(Collection,Comparator) | 根据 Comparator 指定的顺序,返回给定集合中的最小元素 |
int frequency(Collection,Object) | 返回指定集合中指定元素的出现次数 |
void copy(List dest,List src) | 将src 中的内容复制到dest 中 |
boolean replaceAll(List list,Object oldVal,Object newVal) | 使用新值替换List 对象的所有旧值 |

3. 代码演示
@Test
public void test1(){
List list = new ArrayList();
list.add(123);
list.add(43);
list.add(765);
list.add(-97);
list.add(0);
List dest = Arrays.asList(new Object[list.size()]);
System.out.println(dest.size());
Collections.copy(dest,list);
System.out.println(dest);
List list1 = Collections.synchronizedList(list);
}
@Test
public void test2(){
List list = new ArrayList();
list.add(123);
list.add(43);
list.add(765);
list.add(765);
list.add(765);
list.add(-97);
list.add(0);
System.out.println(list);
int frequency = Collections.frequency(list, 123);
System.out.println(list);
System.out.println(frequency);
}