Java.util包源码学习

本文详细介绍了Java.util包中的核心接口和类,包括Collection、List、Set、Queue、Map及其常用实现,如ArrayList、LinkedList、HashMap、HashSet等。文章探讨了这些集合的特点和使用场景,如ArrayList的快速访问、LinkedList的链表操作、HashSet的无重复元素以及HashMap的键值对映射。此外,还提到了其他关键类,如Scanner、Timer和TimerTask,以及Clonable和Serializable接口的作用。
摘要由CSDN通过智能技术生成

java.util包接口

util包主要提供了集合、日历和随机数的工具包。
在这里插入图片描述
集合的两个super接口collection和map

Collection接口

public interface Collection<E> extends Iterable<E> {
   

Collection 的子接口:List、Set、Queue接口

在这里插入图片描述
a) Collection的方法:参考链接

  • 添加功能
     i. boolean add(object obj)添加一个元素
     ii. boolean addAll(Collection c)将集合c的全部元素添加到原集合元素后返回true
     iii. 添加功能永远返回true
  • 删除功能
     i. void clear();移除所有元素
     ii. boolean remove(Object o)移除一个元素
     iii. boolean removeAll(Collection c)移除一个集合的元素,只要有一个被移除就返回true,改变原集合,删除原集合中和c中相同的元素
     iv. 删除功能只有删除成功后才返回true
  • 判断功能
     i. boolean contain(object o)判断集合中是否包含指定的元素。
     ii. boolean containsAll(Collection c)判断原集合中是否包含指定集合c的所有元素,有则true,
     iii. boolean isEmpty()判断集合是否为空
  • 获取功能
     i. Iterator iterator()迭代器,集合的专用方式,实现遍历的功能
     ii. Object next()获取当前元素,并移动到下一个位置
     iii. boolean hasNext()判断此位置是否有元素
     iv. 迭代器遍历实例在下面
  • 长度功能
     i. int size()元素的个数
     ii. 数组和字符串中都是length()方法获取元素个数,集合中是size()方法
      因为object包括集合、字符串、数组,所以其不能直接用length方法。
  • 交集功能boolean retainAll(Collection c)
     两个集合交集的元素给原集合,并判断原集合是否改变,改变则true,不变则false
  • 把集合转换为数组
     i. Object [] toArray()

List接口

public interface List<E> extends Collection<E> {
   

List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。参考链接
常用实现类:
ArrayList、LinkList、Vector 三个类
ArrayList:快速访问使用-动态数组
LinkedList:增加删除适用-链表
Vector:线程安全使用
特点

  • List集合是有序的,有序就是怎么存就怎么取出来,顺序不会乱
  • 元素可以重复,就是你放进去一个了你还可以放一个相同的
  • List 集合是有索引的Index每个元素唯一对应一个index

List方法

List list = new ArrayList();        //声明list
list.add("aa");                     //向列表尾部插入指定元素
list.add(1, "bb");                  //向列表指定位置插入指定元素,索引从0开始
list.addAll(new ArrayList());       //追加指定 collection中的所有元素到此列表的结尾
list.clear();                       //从list中移除所有元素
list。contains("cc");                    //若list包含指定元素返回true
list.equals(new ArrayList());       // 比较指定的对象与列表是否相等
list.get(0);                        // 返回列表中指定位置的元素
list.toArray();                     // 返回以正确顺序包含列表中的所有元素的数组
list.indexOf("aa");                 // 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
list.lastIndexOf("dd");             // 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1
list.isEmpty();                     // 如果列表不包含元素,则返回 true
list.remove(0);                     // 移除列表中指定位置的元素
list.remove("lwc");                 // 移除列表中出现的首个指定元素
list.removeAll(new ArrayList());    // 从列表中移除指定 collection中包含的所有元素
list.set(0, "lp");                  // 用指定元素替换列表中指定位置的元素
list.size();                        // 返回列表中的元素数
list.subList(1, 2);                 // 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
list.hashCode();                    // 返回列表的哈希码值
list.toArray(new String[] {
    "a", "b" });    // 返回以正确顺序包含列表中所有元素的数组

Set接口

public interface Set<E> extends Collection<E> {
   

Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。

实现类
HashSet、TreeSet
HashSet:快速访问使用-哈希表-
TreeSet:排序使用-红黑树

特点

  • 不包含重复元素
  • 集合中的元素是无序的

List和Set的区别

  • List有序、set无序
  • List可以重复、set不可以重复
  • List可以下表访问、set不可以

Queue接口

public interface Queue<E> extends Collection<E> {
   

队列,先进先出
Queue用于模拟"队列"这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素。

    E poll();//出队

Map接口

public interface Map<K,V> {
   

Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值