Java 容器

Collection 是一个接口

The JDK does not provide any direct implementations of this interface, it provides implementations of more specific sub interfaces like Set and List.

Queue 是接口

Set 不包含重复元素的collection,是接口

/** 仅保留此 collection (s1)中那些也包含在指定 collection (s2)的元素(可选操作) 换句话说,移除此 collection 中未包含在指定 collection 中的所有元素。

* */

s1.retainAll(s2);

/**在数据量较小时,add方法配合for循环遍历比addAll来得快.

* 但是在大量数据时,addAll的方法的效率更高.

* list.addAll()是浅拷贝,只是将内存中的地址进行了拷贝,指向了原先list的末尾做了拼接.

* */

s1.addAll(s2);

    HashSet:无序,可以包括null

    TreeSet:有序(继承SortedSet,),不能有null

List 有序的collection,也继承Iterable,是接口

    LinkedList

    ArrayList

/** LinkedList通常比ArrayList快

* LinkedList是一个由相互引用的节点组成的双向链表

* 当把数据插入至该链表某个位置时,该数据就会被组装成一个新的节点,

* 随后只需改变链表中对应的两个节点之间的引用关系,使它们指向新节点,即可完成插入

* 同样的道理,删除数据时,只需删除对应节点的引用即可

*

* 而ArrayList是一个可变长数组

* 插入数据时,则需要先将原始数组中的数据复制到一个新的数组,

* 随后再将数据赋值到新数组的指定位置

* 删除数据时,也是将原始数组中要保留的数据复制到一个新的数组

* */

Map<k,v> 是一个接口

A map cannot contain duplicate keys; each key can map to at most one value

    SortedMap

    AbstractMap

        HashMap: 无序

 遍历时,取得数据的顺序是完全随机的最多只允许一条记   录的键为Null;允许多条记录的值为 Null

LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现

        TreeMap:有序

也实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

        HashTable:线程安全

HashMap允许put进来一个null键

HashTable则不允许,put进来null键后抛异常



Collections 和Arrays都是类

Collections 是集合的一个工具类/帮助类

用于对集合中元素进行排序、搜索以及线程安全等各种操作

//其中提供了一系列 静态方法,属于该类本身,不需依靠实例化出instance才能调用

Collections.sort(list1);

Collections.rotate(list1,-1); //如果是负数,则正向移动,正数则方向移动

Collections.shuffle(l1); //随机排列


1) 排序(Sort)

2) 混排(Shuffling)

3) 反转(Reverse) 使用Reverse方法可以根据元素的原始顺序 对指定列表按降序进行排序。

4) 替换所以的元素(Fill) 使用指定元素替换指定列表中的所有元素。

Collections.fill(li,"aaa");

5) 拷贝(Copy)

6) 返回Collections中最小元素(min)

7) 返回Collections中最小元素(max)

8) lastIndexOfSubList 返回指定源列表中最后一次出现指定目标列表的起始位置

9) IndexOfSubList 返回指定源列表中第一次出现指定目标列表的起始位置

10) Rotate  根据指定的距离循环移动指定列表中的元素

Arrays 看起来是数组的一个工具类/帮助类

可以sort,search,toString啥的


equals() vs ==

==

基本类型Primitive Type:比较value

引用类型Reference type:比较地址

* 基本类型:

* 四种整数类型(byte、short、int、long)

* 两种浮点数类型(float、double)

* 一种字符类型(char)

* 一种布尔类型(boolean)

//数字的比较

* jvm在运行时创建了一个缓存区域,并创建了一个integer的数组。这个数组存储了-128至127的值。

* 因此如果integer的值在-128至127之间,则是去缓存里面获取。

//字符串的比较

* String的字符串“+”(拼接)其实是new了一个StringBuilder对象,

* 并执行其append方法实现拼接,最后通过其toString方法返回一个字符串对象。


equals()

    在Object类里的实现如下,即跟==一样的

public boolean equals(Object obj){

  return(this==obj);

}

equals()与hasCode()相关

* String类中有 private final char value[] 用于character存储

* String的hashCode()用hash法计算散列码,31作为散列系数

* 注意:不同String的hashCode()可能相同



Comparable vs Comparator

Comparable 是一个排序接口

若一个类实现了Comparable接口,就意味着该类支持排序

package java.lang;

import java.util.*;

public interface Comparable<T>

{

    public int compareTo(T o);//this-o

}

Comparator 是一个比较接口

如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序

package java.util;

public interface Comparator<T>

{

    int compare(T o1, T o2);//o1-o2 和汇编at&t相反

    boolean equals(Object obj);//equals()与类的hasCode()相关

}



Iterator 和其子类 ListIterator

都是接口

package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {

  boolean hasNext();

  E next();//JDK没有给这两个方法提供任何实现

  default void remove() {

        throw new UnsupportedOperationException("remove");

    }

}

package java.util;

public interface ListIterator<E> extends Iterator<E> {

  boolean hasNext();

  E next();

  boolean hasPrevious();

  E previous();

  int previousIndex();

  void remove();

  void set(E e);

  //有add耶

  void add(E e);

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容