java---容器

6 篇文章 0 订阅
2 篇文章 0 订阅

容器类

  容器可以存储任意类型数据,可以存储多个数据,但是只能存储引用数据类型,因此存储基本数据类型时,会发生自动装箱。

collection接口

  collection接口是容器类的父接口,一些collection允许重复的元素,一些不允许重复的元素。
  set子接口的特点是无序不可重复。
  list子接口的特点是有序可重复。
常用方法:

  1. void clear() 移除此 collection 中的所有元素(可选操作)。
  2. boolean contains(Object o ) 判断是否包含。
  3. boolean isEmpty()判断是否为空。
  4. boolean remove(Object o) 移除指定数据元素。
  5. boolean removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
  6. boolean retainAll(Collection<?> c) 求交集,保存两个容器都有的数据。
  7. int size() 返回此 collection 中的元素数。
  8. Object[] toArray()转换为数组。

遍历方法:

  • 增强for|for…each
  • 迭代器
//迭代器  
		/*
		 * 1.获取迭代某一个容器的迭代器对象
		 * 2.判断是否存在下一个可迭代的元素  hasNext()  ->true,false
		 * 3.返回下一个元素 next() ->下一个元素
		 */
		Iterator<String> it=coll.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}

泛型:

  • 泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。
  • 泛型提高稳定性和可读性,规定容器中所有数据的数据类型。

list接口

  list接口的特点:有序可重复,有索引。新增了一些根据索引操作的方法。
常用方法:

  1. void add(int index, E element) 在列表的指定位置插入指定元素(可选操作)。
  2. E get(int index) 返回列表中指定位置的元素。
  3. int indexOf(Object o) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
  4. int lastIndexOf(Object o) 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
  5. ListIterator listIterator() 返回此列表元素的列表迭代器(按适当顺序)。
  6. ListIterator listIterator(int index) 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
  7. E remove(int index) 移除列表中指定位置的元素(可选操作)。
  8. List subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

遍历方法:

  • 1.普通for
  • 2.for…each
  • 3.iterator
  • 4.ListIterator

容器类之一ArrayList(重要)

  是List的实现类,因此有序且可重复。线程不安全的容器类。
  底层: 数组(可变数组),数组在内存中是连续的内存空间。
  优点: 查询,随机访问效率高。
  缺点: 增删效率低(改变容量涉及到数组的拷贝)。
  动态扩容:通过调用Arrays.copyOf()方法进行动态扩容,扩容后新容器的大小是原容量的1.5倍。
  第一次添加数据初始容量为10,加载因子(0~1):1 。
  新增方法:使用List定义的方法。

Vector 向量
  底层实现和特点与ArrayList类似,和ArrayList的区别主要是:

  • 1)Vector线层安全的容器类|同步的,效率较低。
  • 2)扩容原容量的2倍。

LinkedList容器类

  底层:双向链表实现。
  优点:增删效率较高。
  缺点:查询或者随机获取效率较低。
  新增方法:新增加了一些链头和链表尾的操作的方法(都具有见名知意)。
常用方法:

  1. void addFirst(E e) 将指定元素插入此列表的开头。
  2. void addLast(E e) 将指定元素添加到此列表的结尾。
  3. E getFirst() 返回此列表的第一个元素。
  4. E getLast() 返回此列表的最后一个元素。
  5. boolean offerFirst(E e) 在此列表的开头插入指定的元素。
  6. boolean offerLast(E e) 在此列表末尾插入指定的元素。

Set接口

  数据是无序的不可重复的,允许null,但是null值只能存在一个。没有新增方法,与Collection中功能相同

遍历方法:

  • 1.增强for
  • 2.迭代器

HashSet容器类

  底层:由哈希表结构存储(数组+链表+红黑树)。
  优点:查询,增加,删除效率较高。
  缺点:无序。
  扩容:默认初始容量16,加载因子0.75 ,扩容是原容量的2倍。

HashSet存储引用数据类型去重:

  • 需要重写hashCode()方法和equals()方法进行自定义类型去重。如果不重写hashCode(),可以遇到没有equals方法这一步就医过滤掉不是相同的对象了,直接存储,不会equals方法比较。hashCode()相同的对象有可能相同可以不相同,进一步比较equals()。hashCode()不相同的对象肯定不相同,过滤掉一写不相同的对象,不需要进一步比较equals方法效率较高。

哈希底层存储数据:

  1. 对数据进行hash算法算出存放(数组)的位置。位置=数据%9;
  2. 把当期那数据存放在对应的桶中,存放之前先判断桶中是否存在数据,如果没有直接存放数据,如果存在数据,拿桶中的数据和该数据比较是否相同,如果相同就去重不存放,如果不相同就存放。
  3. 桶中多个数据用链表结构链接。
  4. 如果桶中数据超过八个,用红黑树存放。

Comparable接口

  内部比较器|自然排序,重写compareTo()方法,方法中自定义比较规则。一般内部比较器都会指定泛型,因为能够确定比较的是什么类型的数据。

Comparator接口

  外部比较器|自定义比较器|自定义排序:重写compare()方法,方法中自定义比较规则。

TreeSet容器类

是由TreeMap维护的。
  底层:红黑树结构实现。
  优点:默认升序排序(默认自然排序|指定排序)。
  缺点:么有HashSet效率高。

注意:

  存储引用数据类型的时候(引用数据类型对象的排序,引用数据类型对象的去重):
引用数据类型

  • 1)实现内部比较器
  • 2)自定义外部比较器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值