[重新做人]从头学习JAVA SE——java.util java.util
自己的java基础实在是一言难尽,虽然看过两遍核心技术,但是真的看完就忘,大多数都是做东西时候,从百度和各种博文看来的,觉得实在有必要再看一遍写一点记录,不算博文,更像是笔记,写给自己看的
其实源码的注释有时候具有比源码更直观的信息
集合
java.util最外层的包就是集合的一些工具,从上到下列在这里:
- AbstractCollection: 减少需要实现Collection的方法,不可编辑的Collection只需要实现iterator和size,可编辑的还需要实现add和remove
- AbstractList:不可编辑的列表需要实现get和size,可编辑需要实现set和add,remove等方法,减少实现随机访问的数据源的方法,如果需要实现序列访问的数据源,AbstractSequentialList是个更好的选择
- AbstractMap:不可编辑的Map需要实现entrySet,基于AbstractSet实现一个Set这个set不支持add和remove方法,它的Iterator支持;可编辑的Map需要覆盖put方法,iterator需要添加remove方法
- AbstractQueue:这个类的实现不允许null元素,最小扩展方法是定义方法offer(不能插入null元素)以及方法peek,poll,size和iterator
- AbstractSequentialList:这个类与AbstractList相反,实现随机访问的功能get,set和remove基于表的list iterator,默认的实现了序列访问的数据源,例如链表。不可编辑的需要实现hasNext,next,hasPrevious,previous,和index方法;可编辑的需要额外实现set方法和remove方法
- AbstractSet:通过向AbstractCollection中添加Set接口限制(不允许重复实例)实现,这个类没有重载任何从AbstractCollection来的方法实现,而是额外添加了equals和hashCode方法
- ArrayDeque:双端队列的可变数组实现,没有容量限制,非线程安全,用作栈的时候比Stack快,用作队列的时候比LinkedList快;
- ArrayList:List接口的可变数组实现,提供了方法来调整数组的容量,非线程安全,当插入元素数量大于底层的数组容量时,会调用容量增长策略
- ArrayPrefixHelpers:ForkJoin tasks 来执行Arrays.parallelPrefix 操作
- Arrays:从1.7之后新引入了ComparableTimSort方法,https://www.jianshu.com/p/bbbbf4577f8e ;DualPivotQuicksort双轴快排,有空可以看下
- ArraysParallelSortHelpers:暂时跳过
- Base64:
- BitSet:
- Calendar:
- Collection:
- ComparableTimSort
- Comparator
- Comparators:
- ConcurrentModificationException:当一个线程在操作集合时,其他线程对集合的操作会发生
- Currency:货币相关
- Date:
- Deque
- Dictionary
- DoubleSummaryStatistics:stream辅助类
- DualPivotQuicksort
- DuplicateFormatFlagsException:重复格式化标志异常
- EmptyStackException: 空栈异常
- Enumeration:枚举接口,已经被Iterator替代
- EnumMap:
- EnumSet:
- EventListener:所有的事件接口必须扩展的
- EventListenerProxy:
- EventObject:
- FormatFlagsConversionMismatchException:
- Formattable:
- FormattableFlags
- Formatter
- FormatterClosedException
- GregorianCalender
- HashMap:key和value都可以为null,无序
- HashSet:实际上是一个HashMap
- HashTable:过时了
- IdentityHashMap:只有k1==k2而不是k1.equals(k2)时,k1,k2才会被视为相同的键
- IllegalFormatCodePointException:不合法的码点
- IllegalFormatConversionException:不兼容的转换符
- IllegalFormatException:不合法的转换格式字符串
- IllegalFormatFlagsException: 不合法的格式标志
- IllegalFormatPrecisionException:不合法的精度表示
- IllegalFormatWidthException:不合法的宽度表示
- IllformedLocaleException:非标准的BCP 47 tag
- InputMismatchException:与期待类型不匹配
- IntSummaryStatistics:
- InvalidPropertiesFormatException:
- Iterator:迭代器接口
- JapaneseImperialCalendar: 日本历实现类
- JumboEnumSet:
- LinkedHashMap:维护插入顺序的HashMap或者上次访问的顺序,相同的键重新插入不影响原来键的位置
- LinkedHashSet
- LinkedList
- List
- ListIterator
- ListResourceBundle:ResourceBundle的子类
- Locale
- LocaleISOData
- LongSummaryStatistics
- Map
- MissingFormatArgumentException:格式字符串指向的参数index不存在
- MissingFormatWidthException:缺少宽度参数
- MissingResourceException:resource不存在
- NavigableMap:提供了一些导航方法
- NavigableSet
- NoSuchElementException:请求的元素不存在
- Objects:对象工具包,包括equal,hash,toString,Null检查等方法
- Observable:可观察者
- Observer:观察者
- Optional:消除Null的工具类java8
- OptionalDouble
- OptionalInt
- OptionalLong
- PrimitiveIterator:原始类型迭代器,避免装箱和拆箱
- PriorityQueue:堆
- PropertyPermission
- PropertyPermissionColleciton:
- PropertyResourceBundle
- Queue
- Random
- RandomAccess:
- RandomAccessSubList
- RegularEnumSet
- ResourceBundle
- Scanner
- ServiceConfigurationError:加载服务provider时抛出的错误
- ServiceLoader
- Set
- SimpleTimeZone:TimeZone的具体子类
- SortedMap
- SortedSet
- Spliterator:遍历和分割一个数据源的元素,数据源可能是数组,集合,IO Channel,或者一个生成器
- Spliterators:
- Stack:基于vector的栈接口
- StringJoiner:组装
- StringTokenizer:不建议使用,分割字符串更推荐String.split或者正则表达式
- SubList:位于AbstractList内
- TaskQueue:一个Timer的堆,位于Timer.java内
- Timer:定时器
- TimerTask: 定时任务
- TimeZone :时区
- TimSort