JAVA:Set/List/Map 集合之List(二)

一、List接口

1,List接口:存储有序的,可以重复的元素.---相当于“动态”数组

2,方法:删除remove(int index) 修改set(int index,Object obj) 获取get(int index)插入add(int index,Object obj)

3,添加进List集合中的元素(或对象)所在的类一定要重写equals()方法

ArrayList(主要的实现类)

LinkedList(更适用于频繁的插入、删除操作)

Vector(古老的实现类、线程安全的,但效率要低于ArrayList)

二、ArraList

1,ArrayList类支持3个构造方法。

//1,Arraylist() 这个构造方法构造了一个空的链表

List list1 =new ArrayList();

// 2,ArrayList(Collection<? extends E> c) 这个构造方法构造了一个包含指定元素集合的链表,字符E表示集合中元素的类型。

ArrayList list2 =new ArrayList();

//3,ArrayList(int initialCapacity) 构造了一个指定大小但内容为空的链表。initialCapacity参数就是初始容量大小。

ArrayList list3 =new ArrayList(7);

注意:ArrayList类只支持对象类型,不支持 基础数据类型。就是说ArrayList对象只能存放对象,不能存放基础数据类型的数据。

2,ArrayList常用方法

增加元素到链表中

boolean add(Element e)  // 增加指定元素到链表尾部.

void add(int index, Element e) // 第一位是0  增加指定元素到链表指定位置.

从链表中删除元素

void clear()  //从链表中删除所有元素.

E remove(int index)  // 删除链表中指定位置的元素.

protected void removeRange(int start, int end) // 删除链表中从某一个位置开始到某一个位置结束的元素。

获取链表中的元素

E get(int index)

获取链表中指定位置处的元素.

Object[] toArray()

获取一个数组,数组中所有元素是链表中的元素.(即将链表转换为一个数组)

修改某个元素

E set(int index, E element)

将链表中指定位置上的元素替换成新元素。

搜索元素

boolean contains(Object o)

如果链表包含指定元素,返回true.

int indexOf(Object o)

返回元素在链表中第一次出现的位置,如果返回-1,表示链表中没有这个元素。

int lastIndexOf(Object o)

返回元素在链表中最后一次出现的位置,如果返回-1,表示链表中没有这个元素。

检查链表是否为空

boolean isEmpty()

返回true表示链表中没有任何元素.

获取链表大小

int size()

返回链表长度(链表包含元素的个数).

3,循环遍历数组

ArrayList list =new ArrayList();

// 遍历arraylist中的元素

// 第1种方法: 循环使用元素的索引和链表的大小

for (int i =0; i < list.size(); i++) {

System.out.println("Index: " + i +" - Item: " + list.get(i));

}

// 第2种方法:使用foreach循环

for (String str : list) {

System.out.println("Item is: " + str);

}

// 第3种方法:使用迭代器

// hasNext(): 返回true表示链表链表中还有元素

// next(): 返回下一个元素

for (Iterator it = list.iterator(); it.hasNext();) {

System.out.println("Item is: " + it.next());

}


三、LinkedList

1,LinkedList简介

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。

LinkedList 实现 List 接口,能对它进行队列操作。

LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。

LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。

LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。

2,构造函数

// 默认构造函数

LinkedList()

// 创建一个LinkedList,保护Collection中的全部元素。

LinkedList(Collection collection)

3,基本方法

boolean      add(E object)

void          add(int location, E object)  在指定位置插入一个元素。

boolean      addAll(Collection<? extends E> collection)

boolean      addAll(int location, Collection<? extends E> collection)

void          addFirst(E object)  在链表头部插入一个元素。

void          addLast(E object)  在链表尾部添加一个元素。

void          clear()

Object        clone()

boolean      contains(Object object)

Iterator<E>  descendingIterator()

E            element()

E            get(int location)  从当前链表中获取指定位置的元素。

E            getFirst()  从当前链表中获取第一个元素。

E            getLast()  从当前链表中获取最后一个元素。

int          indexOf(Object object)

int          lastIndexOf(Object object)

ListIterator<E>    listIterator(int location)

boolean      offer(E o)

boolean      offerFirst(E e)

boolean      offerLast(E e)

E            peek()

E            peekFirst()

E            peekLast()

E            poll()

E            pollFirst()

E            pollLast()

E            pop()

void          push(E e)

E            remove()  从当前链表中移除指定的元素。

E            remove(int location) 从当前链表中移除指定位置的元素。

boolean      remove(Object object)

E            removeFirst()

boolean      removeFirstOccurrence(Object o)

E            removeLast()

boolean      removeLastOccurrence(Object o)

E            set(int location, E object)

int          size()

<T> T[]      toArray(T[] contents)

Object[]    toArray()

4、遍历

// 默认构造函数LinkedList()

List list =new LinkedList<>();

list.add("1");

list.add("2");

//第一种,通过迭代器遍历。即通过Iterator去遍历。

for(Iterator iter = list.iterator(); iter.hasNext();){

String t= (String) iter.next();

}

//第二种 通过快速随机访问遍历LinkedList

int size = list.size();

for (int i=0; i

String t =(String)list.get(i);

}

//第三种 通过另外一种for循环来遍历LinkedList

for (String t:list){

System.out.println(t);

}

四、Vector

1,简介

Vector 可实现自动增长的对象数组。

java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。

创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。

对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况,可以考虑使用向量类。

2,构造方法: 

public vector() 

publicvector(intinitialcapacity,int capacityIncrement) 

publicvector(intinitialcapacity)

使用第一种方法系统会自动对向量进行管理,若使用后两种方法,则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时。系统会扩充向量对象存储容量。

参数capacityincrement给定了每次扩充的扩充值。当capacityincrement为0的时候,则每次扩充一倍,利用这个功能可以优化存储。

3,基本方法

插入功能

(1)adddElement(Object obj)  将obj插入向量的尾部。obj可以是任何类型的对象。对同一个向量对象,亦可以在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数组转换成相应的对象。

例如:要插入整数1时,不要直接调用v1.addElement(1),正确的方法为:

Vector v1 =new Vector();

Integer integer1 =newInteger(1);

v1.addElement(integer1);

(2)setElementAt(Object obj,int index)    将index处的对象设置成obj,原来的对象将被覆盖。 

(3) insertElementAt(Object obj,int index)    在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。

删除功能: 

(1) void removeElement(Object obj)

从向量中删除obj,若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。

(2)  void removeAllElement(); 删除向量所有的对象

(3)  void removeElementAt(int index)  删除index所指的地方的对象

查询搜索功能: 

(1)int indexOf(Object obj) 从向量头开始搜索obj,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1.

(2) int indexOf(Object obj,int index)  从index所表示的下标处开始搜索obj.

(3) int lastindexOf(Object obj) 从向量尾部开始逆向搜索obj.

(4) int lastIndex(Object obj,int index) 从index所表示的下标处由尾至头逆向搜索obj.

(5)synchornized firstElement()  获取向量对象中的首个obj

(6)Object lastElement()  获取向量对象的最后一个obj

4,遍历

Vector hs =new Vector();

hs.add("aa");

hs.add("bb");

//第一种方法

Iterator iterator = hs.iterator();

while (iterator.hasNext()) {

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

}

//第二种方法

Enumeration elements = hs.elements();

while (elements.hasMoreElements()) {

System.out.println(elements.nextElement());

}

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

推荐阅读更多精彩内容