HashMap
无序去重。
HashMap的key是无序不重复的:原因见上一讲HashSet的元素存入顺序。
数据结构:HashMap底层存储元素是使用的数组。
| 方法 | 含义与代码 |
|---|---|
| put | 添加—hashMap.put(key , value) |
| containsKey | 判断是否含有key—hashMap.ccontainsKey(key) |
| containsKey | 判断是否含有key—hashMap.ccontainsKey(value) |
| get | 获取value — hashMap.get(key) |
| getOrDefault | 获取key对应的value值,如果没有key就返回Default—hashMap.getOrDefault(key, Default) |
| isEmpty | 判断集合是否为空—hashMap.isEmpty() |
| putAll | 将集合加到集合中—hashMap.putAll(newhashMap) |
| putIfAbsent | 如果没有key,加入集合中,返回null,有key,返回key对应的value—hashMap.putIfAbsent(key, value) |
| remove | 删除—hashMap.remove(key) |
| remove | 删除—hashMap.remove(key,value) |
| size | 集合长度—hashMap.size() |
| replace | 替换—replace(key, value) |
| repalce | 替换—replace(key, oldValue, newValue) |
| values | 获取集合的value值—Collection< Object> values = hashMap.values() |
| keySet | 遍历集合(获取key值)—Set< Object > keyset = hashMap.keySet() |
| entrySet | 遍历集合(获取键值映射关系)—Set |
linkedHashMap
有序去重。
基本方法与HashMap一样。
特点:有序的,key是不可重复
数据结构:双向链表
添加元素:设置了上一个节点地址和下一个节点地址
遍历元素:获取到第一个添加的节点,然后向下找下一个节点
Hashtable
无序去重。
ConcurrentHashMap 创建对象ConcurrentHashMap
无序去重。
HashMap:允许存null键null值
Hashtable:不允许存null键null值
ConcurrentHashMap:不允许存null键null值
NullPointerException 空指针异常
TreeMap
在使用TreeSet或者TreeMap来保存自定义对象时,必须让自定义对象的类实现Comparable接口,并重写其compareTo()方法,否则会报cannot be cast to java.lang.Comparable异常。
public class Student{}
TreeMap() map = new TreeMap<>();
map.put(new Student(), String);//ClassCastException异常
public class Student implemens comparator{
@Override
public int compara(Student o, Student o){
}
}
TreeMap() map = new TreeMap<>();
map.put(new Student(), String);//ClassCastException异常
public class Student implemens comparable{
@Override
public int comparaTo(Student o){
}
}
TreeMap() map = new TreeMap<>();
map.put(new Student(), String);//无异常
对key值进行自然排序。
内置比较器、外置比较器(见上一章TreeSet)
TreeSet、TreeMap不允许null键。
1、在src文件中新建一个文件名为DBconfig.properties
注意:名用大写比较规范,=两边别打空格,名值对写完后不打分号,不需要分号,不需要双引号。
USERNAME=hhy
PASSWORD=123123
2、在Java文件调用配置文件属性
//创建配置文件对象
Properties p = new Perporties();
//讲配置文件加载到对象中
p.load(Test01.class.getClassLoader().getResourceAsStream("DBConfig.properties"));
//获取配置文件中的数据
String username = p.getProperty("USERNAME");
String password = p.getProperty("PASSWORD");
ArrayList源码
ArrayList<>()底层数据结构为一维数组
linkedArrayList源码linkedList<>()底层数据结构为双向链表
集合工具类Collections(用于Collection系列)public static void main(String[] args){
ArrayList() list = new ArrayList<>();
Collections.addAll(list, 1,4,33,3,2,44);//批量添加
Collections.sort();
//自定义排序
Collections.sort(list,new Comparator(){
@Override
public int compara(Integer o1, Integer o2){
return o1 - o2;//升序
return o2 - o1;//降序
}
});
Object[] ss = list.toArray();//集合转为数组
String str = Arrays.toString(ss);//数组以字符串输出
}
集合总结
Collection系列:存一个值
- List系列:有序可重复
- ArrayList:线程不安全,存储数据
- linkedList:线程不安全,存储数据,队列模式(顺序输出),栈模式(倒序输出)
- Vector(已弃用):线程安全,存储数据
- Stack(已弃用):线程安全,存储数据,栈模式
- Set系列:无序去重
- HashSet:线程不安全,存储数据
- linkedHashSet:线程不安全,存储数据,有序+去重
- TreeSet:线程不安全,自然排序
- Map系列:key无序+去重
- HashMap:线程不安全,存储数据
- linkedHashMap:线程不安全,存储数据,key有序+去重
- Hashtable(已弃用):线程安全,存储数据,方法中加锁,效率低
- ConccurrentHashMap:线程安全,存储数据,JDK1.7分段式加锁,JDK1.8局部加锁+CAS,效率更高
- TreeMap:线程不安全,存储数据,针对key自然排序



