Java集合框架之List

1      集合类—ListNo14

集合(广义,指整个集合体系):

注意:集合中的元素都是引用数据类型,只能是引用数据类型

《虽然可以直接往集合中添加int类型的数据,但其实是先隐式地自动装箱成Integer类型再添加进集合,最后集合中存储的数据是Integer》

可以动态存放多个对象

常用的概念说明

“元素”-------对象,实例

“重复”------两个对象通过hashCode()、equals()相等

“有序”------元素取出的顺序与存入的顺序相同

List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。

1.1    Collection

【广义一系列存储相同类型数据的类的统称

狭义Collection是一个接口,是广义集合体系中最顶层的

int size();

boolean isEmpty();判断此collection中是否包含元素。

booleancontains(Object obj);

booleancontainsAll(Collection c);

boolean add(Objectelement);

booleanaddAll(Collection c);将指定collection中的所有元素添加到此collection

booleanremove(Object element);

booleanremoveAll(Collection c);

void clear();

booleanretainAll(Collection c);.在调用的对象中只保留交集.如果操作成功,返回true

Iteratoriterator();返回在此collection的元素上进行迭代的迭代器。

Object[] toArray();把此collection转成数组。

iterator()

List接口有序(元素添加进去的顺序会保持),元素可重复

Set接口】无序(有例外),元素不可重复

Collection集合(狭义,接口):存放一组相同类型数据的数据结构,其中的元素类型都是引用类型(表面上看可以直接放入基本数据类型,其实是自动装箱在起作用)

List继承Collection的一个接口,其中的元素有序,可重复

【List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素】

Set继承Collection的一个接口,其中的元素不可重复

1.2    ArrayList:

【以数组(线性表)作为实现形式的List,是List的实现类

ArrayList是使用数组结构实现的List集合

}优点:

◦对于使用索引取出元素有较好的效率(随机访问)

–它使用索引来快速定位对象

}缺点:

◦元素做删除或插入速度较慢

–因为使用了数组,需要移动后面的元素以调整索引顺序。

add(E e)往其中添加元素,添加到最后(向ArrayList中添加元素,添加到最后)《方法重载》

size()获取元素的数量

get(int index)获取下标为index的指定位置的元素,下标范围必须是0到长度-1,返回要取得元素

remove(int  index)删除指定下标位置的元素,被删除元素后面的元素都会填补上来,长度也会-1    (存在方法重载)

add(int  index,E  e)在index位置插入元素e,原来index位置以及后面的所有元素都会顺序后移一格

set(int  index,E  e)将index位置的元素替换为新的元素e,集合长度不会变

isEmpty()判断是否为空

addAll(Collection c)将参数中的集合作为子集合添加到另一个集合中去

1.3    迭代器

可以用来遍历集合

IteratorIterator ()  返回当前集合的迭代器

//一个迭代器刚产生时,它的游标指向第一个元素的前一个位置,

boolean  hasNext()判断有没有下一个元素

E  next()游标跳到下一个元素,并将这个元素返回出去

Remove()删除最近一次next返回的那个元素(每次next())后只能调用一次

List接口中有很多抽象方法让ArrayList实现了,可以说List中的方法基本和ArrayList中的方法一致。

Collection接口中没有任何和下标相关的方法,因为要照顾到Set这一分支(Set是无序的,下标对其没有意义)

注意:在ArrayList中实际存放的是封装类

1.4    增强型for循环

for(每次遍历到的元素的引用:集合或数组对象对每次遍历到的元素的引用进行操作)

1.5    LinkedList:

【以链表作为实现形式的List,也是List的实现类

主要方法和ArrayList差不多

链表的特征是插入快,但访问某一下标的元素慢

线性表的特征是插入慢,但访问某一下标的元素快

LinkedList新增了一些插入、删除的方法。

LinkedList是使用双向链表实现的集合。

优点:

◦《对频繁的插入或删除元素有较好的效率

◦适合实现栈(Stack)和队列(Queue)

用法和ArrayList类似

以上两者的实现原理不同,AarrayList是用数组实现的,访问、遍历非常快,但插入元素比较慢;而LinkenList使用链表实现,插入元素比较快,但访问变量慢

add(int index,元素)往指定位置添加元素,或者说在某位置插入元素,原来这个位置的数组向后推

remove(int index)删除指定下标index对应的元素,删除后面的元素会自动填充上来

iterator()获取一个迭代器对象Iterator,可以用这个对象来遍历这个集合

Iterator 方法:

boolean hasNext()是否有下一个元素

next()跳到下一个元素,并且返回这个元素

remove()删除最近一次返回的元素,一次next()对应一                             次remove()

适合边遍历边删除

void addFirst(E e)将指定元素插入此双端队列的开头。

void addLast(E e)将指定元素添加到此列表的结尾。等效于add(E e)

E getFirst()返回此列表的第一个元素,等效于element(),只看不动.

E getLast()返回此列表的最后一个元素。只看不动.

1.6    泛型在集合中的使用:

【在集合的声明类型和构造方法后加上<元素类型>

ArrayList  l  =new ArrayList();

这样的泛型声明表示以后这个集合只能添加这种类型(及子类)的元素,

取出来的也只会是这种类型的元素

如果不声明,默认隐式Object

可以限制集合汇总存放的元素类型

书写方式:

集合类名<元素类型>这样就能将集合的内容限制成<>里的类型了

在add的时候只能放泛型规定的类型及其子类

在get(int index)的时候也只能拿出泛型规定的类型

如果放进去的是泛型类型的子类,那么拿出来时是泛型的类型

优点:

简化集合的使用,无需强制类型转换

增强代码的可读性和稳定性,别的类型的对象无法存入

增强型for循环:

for(元素类型 元素引用:集合或数组){

循环执行的语句;

}

在循环执行的语句中,可以用元素引用去操作每次遍历到的元素

增强型for循环没有下标信息,需要根据下标进行判断或操作的情况下,还是要使用普通的foe循环

1.7    Stack栈

,也是List的实现类(Stack是Vector的子类)

empty()---判断栈是否为空

peek()

pop()-------弹出栈顶元素返回

push(E item)---压栈

search(Object o)

Vector向量,和ArrayList差不多,但是是线程安全的

1.8    代码片段

(1栈Satck:先进后出,压栈与弹栈)

Stacks = new Stack<>();

//压栈

s.push("Android");

s.push("Java");

s.push("1000phone");

while (!s.isEmpty()) {

System.out.println(s.pop());//弹栈打印

}

(2链表集合:LinkedList)

LinkedList l = newLinkedList();

l.add("hollo1");

l.add("hollo2");

for(inti=0;i

System.out.println(l.get(i));

}

(3:数组集合ArrayList)

根据索引获取指定元素:

for (int i = l.size() - 1; i >= 0; i--) {

System.out.println(l.get(i));

}

l.addAll(other);   //将一个集合作为子集合添加到另一个集合中去

增强for循环:

for(String s:l){

System.out.println(s);

}

删除集合元素:可根据索引或元素对象

l.remove(1);//删除下标为1,也就是第二个元素

l.remove("java");//删除参数中的对象元素

在集合中迭代器的使用:Iterator

//使用iterator()方法返回一个迭代器对象

Iterator  iter =l.iterator();

while(iter.hasNext()){  //当有下一个元素时

//就跳到下一个并打印出来

System.out.println(iter.next());

}

用迭代器删除集合元素:

Iterator iter = l.iterator();

while(iter.hasNext()) {

Strings = iter.next();

if(s.matches("[0-9]+")) {

iter.remove();

}

}

你可能感兴趣的:(Java集合框架之List)