Java 容器

2019-05-05  本文已影响0人  CHENpq

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);

}

上一篇 下一篇

猜你喜欢

热点阅读