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    迭代器 

可以用来遍历集合

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

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

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<Integer>  l  =new ArrayList<Integer>();

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

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

如果不声明,默认隐式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:先进后出,压栈与弹栈)

         Stack<String>s = new Stack<>();

                   // 压栈

                   s.push("android");

                   s.push("java");

                   s.push("1000phone");

while (!s.isEmpty()) {

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

                   }

 

2链表集合:LinkedList

LinkedList<String> l = newLinkedList<String>();

                   l.add("hollo1");

                   l.add("hollo2");

                   for(inti=0;i<l.size();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<String> iter = l.iterator();

                   while(iter.hasNext()) {

                            Strings = iter.next();

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

                                     iter.remove();

                            }

                   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值