【java】---Collection体系集合:List、ArrayList、LinkedList及其方法

java之集合—List接口、ArrayList、LinkedList



一、List

1.1 概念

List是继承Collection父接口的子接口,是集合的规范之一。
特点:有序、有下标、元素可重复。
List的实现类有:ArrayListLinkedList、Vector(已放弃)。
由于List是接口,不能直接实现,需要向上转型的方式来创建对象,以其实现类ArrayList为例:

List list = new ArrayList();//通过向上转型的方式创建对象

1.2 独有方法

List继承了Collection接口,为了符合List的特点,拥有许多独特方法。

1.2.1 add(int index,Object obj)

作用:在指定下标index除插入元素obj
返回值类型:void(无返回值)

代码演示:

List list = new ArrayList();
list.add("张三");
list.add("李四");
System.out.println(list);
list.add(1,"王五");
System.out.println(list);

运行结果:

[张三, 李四]
[张三, 王五, 李四]

1.2.2 addAll(int index,Collection c)

作用:将集合c中的所有元素添加到集合的指定下标处
返回值类型:boolean

代码演示:

List list1 = new ArrayList();
List list2 = new ArrayList();
list1.add("苹果");
list1.add("香蕉");
list1.add("菠萝");
System.out.println(list1);
list2.add("大象");
list2.add("长颈鹿");
list1.addAll(1,list2);
System.out.println(list2);

运行结果:

[苹果, 香蕉, 菠萝]
[苹果, 大象, 长颈鹿, 香蕉, 菠萝]

1.2.3 get(int index)

作用:返回下标index处的元素
返回值类型:Object

代码演示:

List list = new ArrayList();
list.add("张三");
list.add("李四");
System.out.println(list.get(1));

运行结果:

李四

1.2.4 set(int index,Object obj)

作用:修改指定下标位置的元素。下标不能越界!(不能超过长度-1)

代码演示:

List list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(list);
list.set(1,"赵六");//更改下标1位置的元素为:"赵六"
System.out.println(list);

运行结果:

[张三, 李四, 王五]
[张三, 赵六, 王五]

1.2.5 subList(int from,int to)

作用:将集合中从下标from开始,到下标to - 1位置的所有元素返回
返回值:List

代码演示:

List list1 = new ArrayList();
list1.add("苹果");
list1.add("香蕉");
list1.add("菠萝");
list1.add("桃子");
list1.add("西瓜");
System.out.println("list1的数据:");
System.out.println(list1);
List list2 = list1.subList(1,4);//将list1从下标1到下标3的所有元素赋值给list2
System.out.println("list2的数据:");
System.out.println(list2);

运行结果:

list1的数据:
[苹果, 香蕉, 菠萝, 桃子, 西瓜]
list2的数据:
[香蕉, 菠萝, 桃子]

1.2.6 indexOf(Object obj)

作用:在集合中查找obj元素第一次出现的位置,如果不存在则返回-1
返回值类型:int

代码演示:

List list = new ArrayList();
list.add("苹果");
list.add("香蕉");
list.add("苹果");
System.out.println("苹果的下标:" + list.indexOf("苹果"));
System.out.println("西瓜的下标:" + list.indexOf("西瓜"));

运行结果:

苹果的下标:0
西瓜的下标:-1

1.2.7 lastIndexOf(Object obj)

作用:在集合中查找obj元素最后一次出现的位置,如果不存在则返回-1
返回值类型:int

代码演示:

List list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("张三");
list.add("王五");
System.out.println("张三的下标:" + list.lastIndexOf("张三"));
System.out.println("赵六的下标:" + list.lastIndexOf("赵六"));

运行结果:

张三的下标:2
赵六的下标:-1

1.2.8 listIterator()

作用:列表迭代器,用于显示元素,功能比迭代器更强大
特点:添加元素、删除元素、修改元素
返回值类型:ListIterator

代码演示:

List list = new ArrayList();
list.add("苹果");
list.add("香蕉");
list.add("菠萝");
list.add("西瓜");
list.add("哈密瓜");
ListIterator lit = list.listIterator();//创建列表迭代器对象
System.out.println("正序迭代:");
while(lit.hasNext()){//从前向后迭代元素
	//hasNext():如果下一个元素存在,返回true,否则返回false
	//nextIndex():返回下一个元素的下标
	//next():返回下一个元素的值,并指向下一个元素
	System.out.print(lit.nextIndex() + "..." + lit.next() + " ");
}
System.out.println();//用于换行,无实际意义
System.out.println("逆序迭代:");
while(lit.hasPrevious()){//从后向前迭代元素
	//注意:逆序迭代的前提是正序迭代过!!
	//hasPrevious():如果上一个元素存在,返回true,否则返回false
	//previousIndex():返回下一个元素的下标
	//previous():返回下一个元素的值,并指向下一个元素
	System.out.print(lit.previousIndex() + "..." + lit.previous() + " ");
}
System.out.println();
lit.remove();//删除下一个元素,并指向该元素的下一个元素
System.out.println("删除元素后:");
while(lit.hasNext()){
	System.out.print(lit.nextIndex() + "..." + lit.next() + " ");
}

运行结果:

正序迭代:
0…苹果 1…香蕉 2…菠萝 3…西瓜 4…哈密瓜
逆序迭代:
4…哈密瓜 3…西瓜 2…菠萝 1…香蕉 0…苹果
删除元素后:
0…香蕉 1…菠萝 2…西瓜 3…哈密瓜


二、ArrayList

2.1 概念

ArrayList是List接口的实现类之一,存储结构为数组结构

2.2 特点

  1. 必须开辟连续空间
  2. 因为有连续空间,所以可通过下标查找元素,查询快修改快
  3. 因为有连续空间,增加和删减元素需要将后面所有元素进行位置改变,增删慢
  4. 集合在创建后,没有任何元素时,集合的容量是0
  5. 集合中第一次添加元素后,集合的容量为10
  6. 每当集合中的元素数量到达容量值后,集合扩容至原容量的1.5倍
  7. 线程不安全。

ArrayList是具体类,可以直接创建对象:

ArrayList list = new ArrayList();

三、LinkedList

3.1 概念

LinkedList是List接口的实现类之一,存储结构为双向链表

3.2 特点

  1. 不用开辟连续空间。
  2. 因为不需要连续空间,所以增加和删除元素只需要改变上下元素的指向,增删快
  3. 因为不需要连续空间,所以查找元素时只能依靠每个元素的指向一个个查找,查询慢,修改慢
  4. 可以实现的操作:入栈(push)和出栈(pop)。
  5. 可以实现队列的操作:入队(offer)和出队(pull)。

LinkedList作为List接口的实现类,可以直接创建对象:

LinkedList list = new LinkedList();

3.2 栈

3.2.1 概念

栈,是一种存储结构,有入栈和出栈两种操作。
特点:先进后出

3.2.2 图片演示

栈操作

入栈顺序:a -> b -> c
出栈顺序:c -> b -> a

3.2.3 代码实现

Stack类,继承Vector类,LinkedList实现了栈结构:

LinkedList stack = new LinkedList();
//push(Object obj):实现栈的入栈操作,相当于在下标0处插入元素。
stack.push("苹果");
System.out.println(stack);
stack.push("香蕉");
System.out.println(stack);
stack.push("葡萄");
System.out.println(stack);
stack.push("火龙果");
System.out.println(stack);

//pop():实现栈的出栈操作,相当于删除下标0处的元素。
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);

运行结果:

[苹果]
[香蕉, 苹果]
[葡萄, 香蕉, 苹果]
[火龙果, 葡萄, 香蕉, 苹果]
[葡萄, 香蕉, 苹果]
[香蕉, 苹果]
[苹果]
[]

3.3 队列

3.3.1 概念

队列,是一种存储结构,有入队和出队两种操作。
特点:先进先出

3.3.2 图片演示

队列操作

入队顺序:a -> b -> c
出队顺序:a -> b -> c

3.3.3 代码实现

Queue接口,继承Collection接口,LinkedList实现了Queue接口:

LinkedList queue = new LinkedList();
//offer(Object obj):实现队列的入队操作,相当于add(Object obj)
queue.offer("张三");
System.out.println(queue);
queue.offer("李四");
System.out.println(queue);
queue.offer("王五");
System.out.println(queue);
queue.offer("赵六");
System.out.println(queue);

//poll():实现队列的出队操作,相当于删除下标0处的元素。
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);

运行结果:

[张三]
[张三, 李四]
[张三, 李四, 王五]
[张三, 李四, 王五, 赵六]
[李四, 王五, 赵六]
[王五, 赵六]
[赵六]
[]


总结

今天介绍了集合体系中的List及其实现类:ArrayList和LinkedList。
至于Vector为什么不讲,是因为这个类已经废弃。
之后我会继续讲解其他集合类型。

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值