JAVA基础之集合

与现代的数据结构类库的常见情况一样,Java集合类库也将接口与实现分离。

1,队列(FIFO先进先出),采用循环数组、链表两种方式实现,循环数组效率高,但是一个有界数组,如果对象数量没有上限,建议选择链表;

2,集合类的基本接口是Collection接口

3,iterator方法,用于实现了Iterator接口的对象,Java SE5.0后,采用了for each循环这种更加简练的方式;for each循环可以与实现了Iterator接口的对象一起工作;

for(String element: c){
    do something
}

4,for each扩展了Iterator接口,标准库的任何集合都可以用for each循环;ArrayList会按顺序循环,下标从0开始;HashSet集合会按照某种次序随机循环

JAVA基础之集合_第1张图片

5,数组与动态的ArrayList类,删除一个中间元素要付出很大代价,原因是删除元素后后面的元素会向前端移动;增加一个中间元素也是如此;

6,Java中的链表都是双向链表,LinkedList,其中listIterator可以向前或向后遍历链表

List<String> staff = new LinkedList<String>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
ListIterator<String> iter = staff.listIterator();
iter.previous();
iter.next();

7,链表不支持随机访问,如果要查看第N个元素,需要越过N-1个元素。下面这种方式访问效率丰常低。

List<String> staff = new LinkedList<String>();
staff.get(0);

8,ArrayList,LinkedList都是List接口的实现类

9,散列表HashTable,可以快速的查找所需对象;

Set set = new HashSet();//无序
SortedSet set = new TreeSet();//有序

10,

JAVA基础之集合_第2张图片

    1)集合类有两个基本接口:Collection和Map;

    2)List是有序集合接口;向List某个位置增加元素时,可以使用ArrayList数组或LinkedList链表;

    3)RandomAcess是空接口(标记接口),instanceof来判断是否支持高效随机访问;

    4)遗留容器类,在Collection之前就已经存在:Vector,Stack,HashTable,Properties。

JAVA基础之集合_第3张图片

JAVA基础之集合_第4张图片

11,

List<String> list = Collections.nCopies(100, "test");//创建100个字符串List
List<String> list = Arrays.asList("a", "b", "c");
String[] values = {"a", "b", "c"};
HashSet<String> staffHashSet = new HashSet<String>(Arrays.asList(values));

12,增加,删除数组的操作较多,采用LinkedList(随机访问效率低,基本采用迭代的方式访问链表),如果随机访问较多,采用ArrayList(增加,删除操作会移动后续数组,效率低下);

13,二分法查找,排序-折半查找;实现了RandomAccess接口;如果没实现采用线性查找;


你可能感兴趣的:(JAVA基础之集合)