美文网首页
Java 容器

Java 容器

作者: CHENpq | 来源:发表于2019-05-05 23:37 被阅读0次

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

}

相关文章

网友评论

      本文标题:Java 容器

      本文链接:https://www.haomeiwen.com/subject/vwtloqtx.html