相关链接
参考:
https://www.cnblogs.com/iwenwen/p/11052689.html
LIST集合
java list集合是可重复,有序,底层为数组和链表的数据结构的集合,内部主要包含
- ArrayList
底层为数组,可以为空,查询速度快,删除慢(数组的特点决定),线程不安全 - LinkedList
底层为链表,可以为空,删除,添加速度快,查询速度慢(链表特点),线程不安全 - vector
用sys 关键字修饰,所以线程安全但是速度,效率低,用的不多,线程安全
为啥线程不全?
- CopyOnWriteArrayList
为啥效率高?
list 如何删除元素?
使用遍历器的方式
Iterator<String> iterator = list.iterator();
System.out.println(list.size());
while(iterator.hasNext()) {
String value=iterator.next();
System.out.println(value);
if(value=="d") {
iterator.remove();
}
}
map
java map 是数据结构是 K-V,,
- HashMap
HashMap可以存储一个Key为null,多个value为null的元素,线程不安全,jdk6实现方式是链表加数组的方式,jdk8实现的方式实现红黑树加链表加红黑树
数据结构和如何存储数据
HashMap
JDK版本 实现方式 节点数>=8 节点数<=6
1.8以前 数组+单向链表 数组+单向链表 数组+单向链表
1.8以后 数组+单向链表+红黑树 数组+红黑树 数组+单向链表
HashMap 存储的一个节点称之为entry,里面存放 hashmap的 key和value的信息
基本概念
红黑树:
相关规则可以参考
https://www.cnblogs.com/woniu4/p/8086707.html
红黑树的作用可以将降低数据的层级,加快数据的查询效率
加载因子:默认为0.75
初始容量:16
存储位置的计算方式:
hashmap 的遍历方式?
// 第一种,普遍使用 keyset 方式
for(String key:map.keySet()) {
System.out.println(key);
System.out.println(map.get(key));
}
// 使用遍历器的方式
Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry<String,String> entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println(key.toString());
System.out.println(value.toString());
}
// 直接使用 entry的方式
for(Map.Entry<String, String> entry :map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
具体实现的过程参考:
2. HashTable
Hashtable K和V都不能为空,线程安全
3. CurrentHashMap
HashMap的封装类型,线程安全。
如何实现的?
- TreeMap
map排序实现过程
参考:
https://www.cnblogs.com/lovebread/archive/2009/11/23/1609121.html
Map 的排序?
按key 来排序
/**
* @{#} MapTest2.java Create on 2020年8月27日 下午3:49:04
*
* Copyright (c) 2013 by Logan.
*/
package test.map;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* @author jiangcl
* @version 1.0
* @desc
*/
public class MapTest2 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("apple", 200);
map.put("pear",4534);
map.put("wantermelan",4111);
map.put("orange",1010);
// 按照 key 来排序
/*
* 首先hashmap 存储节点是entry 存储key和value的值
* 我们可以获取存储hashmap 存储key的集合
* 然后通过sort 方法进行排序
*
* **/
Set set = map.keySet();
Object[] obArr = set.toArray();
Arrays.sort(obArr);
for(int i = 0 ;i<obArr.length;i++) {
System.out.println(obArr[i].toString());
}
System.out.println("=====================");
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
按照hashmap 的value 来排序
/**
* @{#} MapTest3.java Create on 2020年8月27日 下午4:13:15
*
* Copyright (c) 2013 by Logan.
*/
package test.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* @author jiangcl
*
* @version 1.0
* @desc
*
*/
public class MapTest3 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("apple", 200);
map.put("pear", 4534);
map.put("wantermelan", 4111);
map.put("orange", 1010);
// 按照 value 来排序
/*
* 思路还是获取hashmap的节点信息 entry,然后将entry 中的value的值取出放到
* 重写compare 的方法进行排序
* **/
List<Map.Entry<String, Integer>> list =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
list.sort(new Comparator<Map.Entry<String, Integer>>(){
@Override
public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
// 具体排序的实现
return arg0.getValue().compareTo(arg1.getValue());
}
});
// 另一种方法
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(int i = 0;i<list.size();i++) {
System.out.println(list.get(i).getValue());
}
}
}
set集合
set 集合是不为空,无序集合
参考资料:https://baijiahao.baidu.com/s?id=1662461513424816401&wfr=spider&for=pc
- HashSet
HashSet 底层实现是HashMap,并且HashSet中add方法保存的内容为hashMap里面的key,hashMap的key 是不能重复的所以hashset也元素也不能重复
-
TreeSet
底层为treeMap -
LinkedHashSet
底层实现的机制为linkedHashMap