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

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,257评论 0 16
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,495评论 0 3
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX阅读 873评论 0 1
  • 概述 Java集合框架由Java类库的一系列接口、抽象类以及具体实现类组成。我们这里所说的集合就是把一组对象组织到...
    absfree阅读 1,251评论 0 10
  • 西安之旅已经结束,千年的古城,十三朝古都,有着数不清的古代遗迹,有数不清的美食。却没有很深的印象和旅游所期...
    大脸猫不吃饭阅读 259评论 0 2