整理我理解的Java集合相关

Java集合是什么?

  • 它是一个数据结构,用来存储和操作对象的

  • 在早期的java版本中,虽然已经有了Dictonary,Vector,Stack和Properties这些类可以存储和操作对象,但是它们缺少统一的抽象,所以使用Vector的方式和使用Properties的方式有很大的不同,增加了开发的难度。

  • 集合框架需要满足的几个目标

    • 必须是高性能的,基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
    • 允许不同类型的集合,以类似的方式工作,具有高度的互操作性(有高层的抽象(接口))
    • 对一个集合的扩展和适应必须是简单的(数据结构的实现必须简单易于理解,有标准的实现)
      引用自RUNOOB.COM

两种容器类型

  • Collection
    Collection是一个基本的集合接口,它可以容纳一组集合元素,它有三个子类型的接口:

    • List
      有序、可重复
      实现类
      • ArrayList
        优点:底层数据结构是数组,查询快,增删慢,因为线程不安全,所以效率高
        缺点:线程不安全
      • Vector
        优点:底层数据结构也是数组,查询快,增删慢,线程安全
        缺点:线程安全,效率低
      • LinkedList
        优点:底层数据结构是链表查询慢,增删快,因为线程不安全,所以效率高
        缺点:线程不安全
    • Set
      无序,唯一(不能重复)
      实现类:
      • HashSet
        底层数据结构是哈希表
        通过hashCode()和equals()方法来保证元素唯一性。如果存储自定义对象,需重写hashCode()和equals()
      • LinkedHashSet
        底层数据结构是链表和哈希表(FIFO插入有序,唯一)
        由链表保证元素有序
        哈希表保证元素唯一
      • TreeSet
        底层数据结构是红黑树(唯一、有序)
        元素排序:自然排序,自定义比较器排序
        根据比较的返回值是否是0来决定
    • Queue
  • Map
    Map接口有三个比较重要的实现类

    • HashMap
      线程不安全,效率较高
      键值都可以为null
public static void testHashMap(){
        HashMap<String,Object> map = new HashMap<>();
        map.put(null,null);
        map.forEach((k,v)-> System.out.println(k+"="+v));
    }
    结果:
    null=null

无序的

	public static void testHashMap(){
        HashMap<String,Object> map = new HashMap<>();
        map.put("one","one");
        map.put("two","two");
        map.put("three","three");
        map.put("four","four");
        map.put("five","five");
        map.forEach((k,v)-> System.out.println(k+"="+v));
    }
    运行结果:
    four=four
	one=one
	two=two
	three=three
	five=five

父类:AbstractMap

  • TreeMap
    有序的
    键不可以为null,报空指针异常,值可以为null
public static void testTreeMap(){
        TreeMap<String,Object> treeMap =new TreeMap<>();
        treeMap.put(null,null);
        treeMap.forEach((k,v)-> System.out.println(k+"="+v));
    }
   运行结果:
   Exception in thread "main" java.lang.NullPointerException
	at java.util.TreeMap.compare(TreeMap.java:1294)
	at java.util.TreeMap.put(TreeMap.java:538)
	at com.pannk.demo.map.TreeMapTest.testTreeMap(TreeMapTest.java:16)
	at com.pannk.demo.map.TreeMapTest.main(TreeMapTest.java:11)
public static void testTreeMap(){
        TreeMap<String,Object> treeMap =new TreeMap<>();
        treeMap.put("hello",null);
        treeMap.forEach((k,v)-> System.out.println(k+"="+v));
    }
    运行结果:
    hello=null
    
  • HashTable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值