Java基础——ArrayList与LinkedList(一)
一、定义
ArrayList和LinkedList是两个集合类,用于储存一系列的对象引用(references)。
引用的格式分别为:
ArrayList<String> list = new ArrayList<String>();
LinkedList<Integer> list = new LinkedList<Integer>();
二、ArrayList与LinkedList的大致区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构;
2.对于随机访问get和set,ArrayList优先于LinkedList。因为LinkedList要移动指针。
3.对于新增和删除操作(add和remove),LinkedList比较占优势,因为ArrayList要移动数据。
(关于3,网上又争论,意思是说对大型数据的增删,收尾增删或对中间某位作用,效果是不同的,有待考证!)
三、ArrayList与LinkedList常用方法
代码实例:
import java.util.ArrayList; public class CollT2 { public static void main(String[] args) { // 新建一个ArrayList
ArrayList<String> list = new ArrayList<String>();
System.out.println("初始化大小:" + list.size()); // 添加元素
list.add("北京");
list.add("天津");
list.add("上海");
list.add("广州");
list.add("深圳");
list.add("海口");
list.add("厦门");
System.out.println("当前容量:" + list.size()); // 讲ArrayList的大小和实际所含元素的大小设置一致
// 注意:此操作演示下面会抛出的异常:java.util.ConcurrentModificationException
list.trimToSize(); // 遍历
for (String string : list) {
System.out.println(string); // 在指定位置插入元素
list.add(2, "黑龙江");
for (String string1 : list) {
System.out.println(string1);
}
System.out.println("=======分割线========"); // 清空list
list.clear();
for (String string3 : list) {
System.out.println(string3);
} }
}
}
import java.util.LinkedList; //ArrayList基于数组实现,所以它具备数组的特点,即查询速度较快,但是修改、插入的速度却有点儿慢。
//下面将要介绍的LinkedList就是来解决这个问题的,LinkedList基于链表,与ArrayList互补。
//所以实际开发中我们应该按照自己的需求来定到底用哪一个。 //LinkedList底层采用双向循环列表实现,进行插入和删除操作时具有较高的速度.
//我们还可以使用LinkedList来实现队列和栈 public class CollT3 {
@SuppressWarnings("null")
public static void main(String[] args) { // 創建一個list
LinkedList<Integer> list = new LinkedList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>();
LinkedList<Integer> list3 = new LinkedList<Integer>();
LinkedList<Integer> list4 = new LinkedList<Integer>(); System.out.println(list.size()); // 添加元素
// list.add("锅包肉");没考虑数据类型
// list.add("溜肉段");
System.out.println("====分割线1===="); list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(10); list2.add(-1);
list2.add(-2);
list2.add(-3);
list2.add(-4);
list2.add(-5); list3.add(111);
list3.add(222);
list3.add(333);
list3.add(444);
list3.add(555); list4=null; System.out.println(list.size()); // 遍历
for (Integer a : list) {
System.out.println(a);
} list.add(4, 11111);
System.out.println(list);// 竟然是横着打印出来的
System.out.println("===分割线2===="); list.add(3, 22222);
System.out.println(list);// 二次验证竟然是横着打印出来的 System.out.println("===分割线3====");
System.out.println(list.addAll(list2));
System.out.println(list); System.out.println("===分割线4====");
// 错误:System.out.println(2,list.addAll(list3));
list.addAll(2, list3);// 将指定 collection 中的所有元素从指定位置开始插入此列表。
System.out.println(list); System.out.println("===分割线5====");
list3.addFirst(3);//需要单独打印
System.out.println(list3); System.out.println("===分割线6====");
list3.addLast(0000000001);//
list3.addLast(000000000);//
list3.addLast(0);//0
//list3.addLast(00000000000000009);//The literal 00000000000000009 of type int is out of range
list3.addLast(0000000000000000000000000000000000007);//末尾只能写到7,8和9不行
System.out.println(list3); list.clear();
System.out.println(list);//[] System.out.println("===分割线7===="); list2.clone();//返回此 LinkedList的浅表副本。
System.out.println(list); System.out.println("===分割线8====");
//list3.contains(999999999);//呃,竟然不是这么验证的!!!!
System.out.println(list3.contains(999999999));// 如果此列表包含指定元素,则返回 true。 System.out.println("===分割线9====");
//list3.element();//呃,竟然不是这么验证的!!!!
System.out.println(list3.element());//获取但不移除此列表的头(第一个元素)。
System.out.println(list3);//验证上面的操作真的只是获取没有移除 System.out.println("===分割线10====");//注意上面对list3的操作,给它头位添加个3了
System.out.println(list3.get(2));// 返回此列表中指定位置处的元素。 System.out.println("===分割线11====");
System.out.println(list3.getFirst());//返回此列表的第一个元素。
System.out.println(list3.getLast());//返回此列表的最后一个元素。 System.out.println("===分割线12====");
System.out.println(list3.indexOf(333));//返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
System.out.println(list3.indexOf(10)); System.out.println("===分割线13====");
list3.add(333);
list3.add(333);
list3.add(333);
System.out.println(list3);
System.out.println(list3.lastIndexOf(0));//返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
System.out.println(list3.lastIndexOf(9));//-1 System.out.println("===分割线14====");
list3.offer(6);//将指定元素添加到此列表的末尾(最后一个元素)。
System.out.println(list3.offer(6));//true
System.out.println(list3); System.out.println("===分割线15====");
System.out.println(list3.peek());// 获取但不移除此列表的头(第一个元素)。 //peekFirst();获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
//System.out.println(list4.peekFirst());上面list4定义为null,黄色报错。用了@SuppressWarnings("null")。验证:java.lang.NullPointerException
//System.out.println(list4.peekLast());java.lang.NullPointerException System.out.println("===分割线16====");
System.out.println(list3);
list3.poll();
System.out.println(list3); System.out.println("===分割线17====");
System.out.println(list3);
list3.toArray();//返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组。
System.out.println(list3);
} }
打印结果:
0
====分割线1====
6
5
6
7
8
9
10
[5, 6, 7, 8, 11111, 9, 10]
===分割线2====
[5, 6, 7, 22222, 8, 11111, 9, 10]
===分割线3====
true
[5, 6, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5]
===分割线4====
[5, 6, 111, 222, 333, 444, 555, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5]
===分割线5====
[3, 111, 222, 333, 444, 555]
===分割线6====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7]
[]
===分割线7====
[]
===分割线8====
false
===分割线9====
3
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7]
===分割线10====
222
===分割线11====
3
7
===分割线12====
3
-1
===分割线13====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333]
8
-1
===分割线14====
true
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
===分割线15====
3
===分割线16====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
===分割线17====
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
Java基础——ArrayList与LinkedList(一)的更多相关文章
- Java基础-ArrayList和LinkedList的区别
大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为Lin ...
- Java基础——ArrayList与LinkedList(二)
今天练习ArrayList与LinkedList,在网上看到有关它俩应用效率的题型.觉得很有价值,保留一下. import java.util.ArrayList; import java.util. ...
- JAVA基础:ArrayList和LinkedList区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList ...
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
- Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...
- Java中arraylist和linkedlist源代码分析与性能比較
Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...
- java中ArrayList 和 LinkedList 有什么区别
转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...
- Java基础——ArrayList
Java基础--ArrayList 作用:提供一个可变长度的集合,底层实际上是一个可变长度的数组 格式:ArrayList <E> arr=new ArrayList<>(); ...
- Java中ArrayList和LinkedList差别
一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机訪问get和set.A ...
随机推荐
- 在ASP.NET MVC部署AngularJs
创建一个ASP.NET MVC项目. 打开NuGet管理,安装angularjs: 在App_Start目录下,Bundle刚刚安装的angularjs库: 在Global.asax.cs的Appli ...
- AEAI DP创建弹窗
1 背景概述 在平时我们浏览页面时,经常会看见这样的应用情景,点击某个按钮或点击某个页面区域时,会弹出一个浮动窗口,像这类的功能,在一些开发的项目中很常见,笔者发现使用AEAI DP应用开发平台可以很 ...
- 使用Flask+uwsgi+Nginx部署Flask正式环境
环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...
- 使用wget命令爬取整站
快速上手(整个bootstrap网页全被你抓取下来了~_~) wget -c -r -npH -k -nv http://www.baidu.com 参数说明 -c:断点续传 -r:递归下载 -np: ...
- cad2019卸载/安装失败/如何彻底卸载清除干净cad2019注册表和文件的方法
cad2019提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2019失败提示cad2019安装未完成,某些产品无法安装,也有时候想重新安装cad2019 ...
- Codeforces Round #479 (Div. 3)解题报告
题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...
- Java零基础教程(二)基础语法
Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...
- 反向读取Mysql数据库表结构到PowerDesigner中
使用PowerDesigner挺长时间了,只是一些简单的表结构设计,因需要对当前数据库进行再设计,需要看一下数据库中所有的表,及表之间的关系,并重新修改表结构,因此需求就是怎么把数据库中的表结构反向生 ...
- vue教程1-05 事件 简写、事件对象、冒泡、默认行为、键盘事件
vue教程1-05 事件 简写.事件对象.冒泡.默认行为.键盘事件 v-on:click/mouseover...... 简写的: @click="" 推荐 事件对象: @clic ...
- Bridge桥接模式(结构型模式)
现有一个需求,一个游戏系统需要构建不同风格的房屋,暂不考虑其他设计模式,需要能实现在PC端.移动端....等等多个平台的构建.最简单的实现方式如下: /// <summary> /// 房 ...