java集合详解

一、java集合分为两个大类一个是实现Collection,一个是实现Map接口

如图:
在这里插入图片描述叶子节点都是实现类,其他都是接口,继承了父接口,也可以理解为扩展了子接口

二、set接口及其实现类详解

  1. set接口的性质:类似数学中的集合无序,不可重复(无序是指你插入的顺序与你读出来的顺序不同)
  2. set接口的实现类有两个 一个是HashSet 另一个是TreeSet
  3. HashSet map接口中的HashMap 是以键值即K-V形式存储的 HashMap允许key值有一个是null存储在数组的entry[0]位置,允许多个value值为null,HashSet就是HashMap的value值为null 即key就是你存储的元素,value默认是null,所以HashMap的的数据结构与HashSet一样 HashMap会在下面详细说
  4. TreeSet是SortMap接口的实现类,他对插入的对象进行排序 假如是自定义的类,需要实现Comparable<>接口
package com.jd.test;

import java.util.Comparator;

//演示浅克隆
public class Book implements Cloneable,Comparable<Book>{
    private int price;
    private int size;
    private int a;
    public Book(){};
    public Book(int a){
        this.a = a;
    };
    public Book clone(){
        Book bk = null;
        try {
            bk = (Book)super.clone();
        }catch (CloneNotSupportedException e){

        }

        return bk;
    }
    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getA() {
        return a;
    }

    @Override
    public String toString(){
       return "Book.price = "+this.getPrice()+
       "  Book.size = "+this.getSize();

    }


//这个方法是Comparable接口的方法 我们实现这个方法,TreeSet才能基于他比较大小
    @Override
    public int compareTo(Book o) {
        return this.getA()-o.getA();
    }

//调用方法

public class void Main(String[] args){
	Book bk1 = new Book(1);
	Book bk2 = new Book(2);
	Book bk3 = new Book(3);
	Set book = new TreeSet();
	book.add(bk1);
	book.add(bk2);
	book.add(bk3);
	Iterator it = book.iterator();
	while(it.hasNext()){
		Book bk = it.next();
		System.out.println(bk.getA())
	}
}

结果:
1
2
3

//无论按什么顺序插入 输出都是基于a的大小来比较升序输出

三、list接口及其实现类详解

list相当于数学中的数列,有序(插入顺序与读出顺序一致)可以重复 元素顺序是从0开始的

3.1 ArrayList

顾名思义 底层实现是数组,所以就有了数组的特性增删慢,查询快 每次扩容是原来的0.5倍 初始容量是10

3.2 Vector

也是数组实现的,他是线程安全的类 ArrayList不是线程安全的,每次扩容是原来的1倍

3.3 LinkedList

底层实现是链表,适合插入删除操作 性能比较高

四 Map接口

map 接口的存储方式是以键值对的形式添加即K-V结构

4.1HashMap

  1. 哈希map的数据结构是数组加链表,主干是数组,初始大小是16 阈值为容量的0.75(也叫扩充因子)即每次扩充为原来大小的1.75倍
  2. HashMap的key可以为null但是仅仅可以有一个 value可以有多个值为null 存储在数组的下标为0的位置
  3. HashMap是线程不安全的 HashMap的hash冲突的解决方案是使用链地址法 也就是数组加链表中的链表部分;1.8 链表长度超过8会转换为红黑树

4.2 LinkedHashMap

LinkedHashMap的数据结构与HashMap没有区别只是内部维护了一个双向链表 可以保持顺序(插入和读出顺序一致)

4.3 Hashtable(table首字母不大写)

Hashtable 是线程安全的 但是效率极低 内部用到了Synchnized锁 线程安全建议用concurrentHashMap 用分段锁机制加了即实现了安全又有效率

4.4 TreeMap

同TreeSet 插入的元素是有序的 (不是插入与读出的顺序而是大小排序)
自定义的类需要实现Comparable接口
底层实现是红黑树


五 结合面试题巩固知识点

  1. Hashtable,HashMap,ConcurrentHashMap 底层实现原理与线程安全问题

六 随笔

hashmap的put操作 如果key已经存在了,那么新的value会覆盖旧的value
用谷歌的gson.from(String,Hashmap.class) 如何json中的key重复会报错

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值