小东吖 之 java List 接口以及 ArrayList集合 LinkedList集合
来源:互联网 发布:大数据挖掘工具 编辑:程序博客网 时间:2024/06/01 13:45
一.List接口
List接口是Collection接口的子接口,List有一个重要的实现类–ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列。
List可以精确的控制每个元素的插入位置,或删除某个位置元素,它的实现类ArrayList底层是由数组实现的。
List中有增删改查的方法,我们可以通过例子演示:
1, 测试List接口中 特有的方法
1.add(E e)
向列表的尾部添加指定的元素(可选操作)
2.add(int index, E element)
在列表的指定位置插入指定元素(可选操作)。
3.set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)
4.get(int index)
返回列表中指定位置的元素。
5.remove(int index)
移除列表中指定位置的元素(可选操作)。
//add 添加 List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); // 向指定索引添加元素 (相当于插入)(不能越界添加) //list.add(4, "w"); // 替换指定索引的元素(不能越界 不能替换超出集合长度的索引) //list.set(4, "m"); // 获取指定下标位置的元素(不能越界) //Object object = list.get(1); // 利用List遍历 for (int i = 0; i < list.size(); i++) { Object object2 = list.get(i); System.out.println(object2); // 指定位置删除 Object remove = list.remove(1); Iterator iterator = list.iterator();
二.ArrayList集合
1.什么是ArrayList?
可以简单的认为是一个动态数组;实际上ArrayList就是用数组实现的
Java.util.ArrayList类是一个动态数组类型,也就是说,ArrayList对象既有数组的特征,也有链表的特征。可以随时从链表中添加或删除一个元素。ArrayList实现了List接口。
大家知道,数组是静态的,数组被初始化之后,数组长度就不能再改变了。ArrayList是可以动态改变大小的。那么,什么时候使用Array(数组),什么时候使用ArrayList?答案是:当我们不知道到底有多少个数据元素的时候,就可使用ArrayList;如果知道数据集合有多少个元素,就用数组。
2.下面是总结了一些比较常用的ArrayList类成员方法:
增加元素到集合中 boolean add(Element e) 增加指定元素到列表尾部. void add(int index, Element e) 增加指定元素到列表指定位置.从列表中删除元素 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() 返回列表长度(链表包含元素的个数)
以上是ArrayList类中使用比较多的成员方法。每个方法的更详细的说明或其它没有提及到的方法,读者可以参考java官方api
3.代码来实现一下:
public class Test { public static void main(String args[]) { // 创建一个空的list集合 ArrayList list = new ArrayList(); // 增加元素到list对象中 list.add("a"); list.add("b"); list.add(2, "c"); // 此条语句将会把“c”字符串增加到list的第3个位置。 list.add("d"); // 通过元素找索引 int index = list.indexOf("b"); System.out.println("index = " + index); // 检查集合是否为空 boolean check = list.isEmpty(); System.out.println(check); // 获取集合的大小 int size = list.size(); System.out.println(size); // 检查集合中是否包含某元素 boolean b1 = list.contains("b"); System.out.println(element); // 获取指定位置上的元素 String index = list.get(0); System.out.println(index); // 遍历arraylist中的元素 // 使用迭代器 // hasNext(): 返回true表示集合中还有元素 // next(): 返回下一个元素 Iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(list); } // 替换元素 list.set(1, "Newa"); System.out.println(list); // 移除元素 // 移除第0个位置上的元素 list.remove(0); // 移除第一次找到的 "b"元素 list.remove("b"); System.out.println(list); // 转换 ArrayList 为 Array // 集合转为数组 String[] simpleArray = list.toArray(new String[list.size()]); System.out.println(Arrays.toString(simpleArray)); }}
三.LinkedList集合
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。
1.一些常用方法
LinkedList linkedList = new LinkedList(); // 添加元素 linkedList.add("a"); linkedList.add("b"); linkedList.add("c"); // 从集合 头 和 集合 尾 进行添加 linkedList.addFirst("d"); linkedList.addLast("e"); System.out.println(linkedList); // 获取 集合第一个值 和 集合最后一个值 System.out.println(linkedList.getFirst()); System.out.println(linkedList.getLast()); // 获取指定位置的元素 Object object = linkedList.get(1); System.out.println(object);
2.查找元素
LinkedList List = new LinkedList(); List.add("1"); List.add("2"); List.add("3"); List.add("4"); List.add("5"); List.add("2"); // 根据索引查找元素 System.out.println(lList.indexOf("2")); // 查找集合的最后一位元素 System.out.println(lList.lastIndexOf("2"));
3.替换元素
LinkedList List = new LinkedList(); List.add("1"); List.add("2"); List.add("3"); List.add("4"); List.add("5"); System.out.println(lList); lList.set(3, "a");//使用set方法替换元素,方法的第一个参数是元素索引,后一个是替换值 System.out.println(lList);
4.利用LinkedList 模拟栈的 出栈 和 入栈
首先知道栈和队列的区别
// 入栈就是添加 出栈 删除
// 栈和队列 什么是栈 和 什么是队列
// 栈结构 : 先入后出(main函数最后弹栈 程序结束)
// 队列结果: 先入先出(比如排队买早点 先买先走)
// 模拟栈的 入栈 和 出栈 LinkedList<String> linkedList = new LinkedList<>(); linkedList.addFirst("a"); linkedList.addFirst("b"); linkedList.addFirst("c"); while (!linkedList.isEmpty()) { System.out.println(linkedList.removeFirst()); }
// 模拟队列的 入栈 和 出栈 LinkedList<String> linkedList = new LinkedList<>(); linkedList.addFirst("a"); linkedList.addFirst("b"); linkedList.addFirst("c"); while (!linkedList.isEmpty()) { System.out.println(linkedList.removeLast()); }
四.总结
数组实现 ArrayList
特点:查询快 增删慢
查询: 依赖下标查询
增删: 把要插入位置后面的所有元素 向后移一位
(或者删除时 向前移一位)
数组在创建时 默认有10个位置 当要保存11个值时
系统会自动创建一个新数组 长度为原来数组长度1.5倍
链表实现 LinkedList
特点:查询慢 增删快
1.链表中的元素 保存了上一个元素和下一个元素的地址
通过这个地址 可以找到上一个元素 和 下一个元素
2.在进行查找的时候 先判断出 要查找的元素 距离头近还是尾近
3.例如头近 就从头位置 一个一个向下查询(通过保存的地址)
4.增删时 直接找到插入的位置 重新保存下 上一个元素 和下一个元素的地址 就可以
什么时候使用 ArrayList和LinkedList?功能是 查询多(建议用ArrayList)还是增删多(建议用LinkedList)
五.练习
1.遍历集合(使用迭代器) 如果数组中 有”b”这个元素 就添加”s”这个元素
// 创建集合List<String> list = new ArrayList<>();// 添加元素 list.add("a"); list.add("b"); list.add("c"); // 用List独有的迭代器 ListIterator<String> listIterator = list.listIterator(); while (listIterator.hasNext()) { if (listIterator.next().equals("b")) { listIterator.add("s"); } } System.out.println(list);
结果
[a, b, s, c]
2.在集合中存储 a a a b b c c 要求 去除重复元素
ArrayList arrayList = new ArrayList(); arrayList.add("a"); arrayList.add("a"); arrayList.add("b"); arrayList.add("b"); arrayList.add("c"); arrayList.add("c"); //创建新集合 ArrayList arrayList2 = new ArrayList(); // 遍历原集合 Iterator iterator = arrayList.iterator(); while (iterator.hasNext()) { // 取出每一个元素 Object next = iterator.next(); // 判断包不包括 if (!arrayList2.contains(next)) { // 不包括就添加进去新集合里 arrayList2.add(next); } } System.out.println(arrayList2);
结果
[a, b, c]
- 小东吖 之 java List 接口以及 ArrayList集合 LinkedList集合
- Java集合之LinkedList(实现List接口)
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- Java集合之三List接口及其实现类ArrayList、LinkedList、Vector
- java基础之集合List-ArrayList、LinkedList、Vector的区别
- Java集合框架之List---ArrayList与LinkedList源码分析
- java集合框架之List------03_02 ArrayList Vector LinkedList
- 【Java集合之List】ArrayList和LinkedList区别
- Java集合框架-1.【集合类】【Collection接口】【List】【ArrayList】【Vector】【LinkedList】
- Java集合:ArrayList、LinkedList
- java程序员从笨鸟到菜鸟之(二十五)集合之List接口的子实现类ArrayList,LinkedList,Vector
- List接口实现类-ArrayList、Vector、LinkedList集合深入学习以及源码解析
- 集合list、ArrayList、LinkedList、Vector
- Java集合之ArrayList,LinkedList,Vector
- JAVA集合之ArrayList和LinkedList
- JAVA集合之---LinkedList、ArrayList与Vector
- Java集合类学习之Arraylist、Linkedlist
- Java集合之List---ArrayList
- python学习总结----爬虫爬一个网站的图片
- 23种设计模式汇总整理
- 【Android技术难点突破】Android图文混排实现
- lintcode4-4. 丑数 II
- 情眷
- 小东吖 之 java List 接口以及 ArrayList集合 LinkedList集合
- rundeck调度工具部署安装
- C++诡异的问题
- 关于java中的继承
- 计算机视觉_Opencv
- 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto
- 从今天开始自学PYTHON啦!
- Play with lkvm
- stack的使用