Java学习笔记30(集合框架四:List接口)
List接口继承自Collection接口
具有重要的三大特点:
1.有序集合:存入和取出的顺序一致
2.此接口的用户可以对列表中每个元素插入位置精确的控制:可以通过索引操作
3.可以存储重复元素
List接口的特有方法(与索引有关):
package demo; import java.util.List;
import java.util.ArrayList; //List接口继承Collection接口,下有很多实现类
//例如ArrayList
public class ListDemo {
public static void main(String[] args) {
function1();//添加
function2();//删除
function3();//修改
}
public static List<String> function(){
//创建集合
List<String> list = new ArrayList<>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
return list;
}
public static void function1(){
List<String> list = function();
System.out.println(list);
//[abc1, abc2, abc3, abc4]
list.add(1, "abc");//在1索引上添加
System.out.println(list);
//[abc1, abc, abc2, abc3, abc4]
}
public static void function2(){
List<String> list = function();
System.out.println(list);
//[abc1, abc2, abc3, abc4]
String s = list.remove(1);
System.out.println(s);//输出:abc2
System.out.println(list);
//[abc1, abc3, abc4]
}
public static void function3(){
List<String> list = function();
System.out.println(list);
//[abc1, abc2, abc3, abc4]
String s = list.set(2, "abc");
System.out.println(s);//输出:abc3
System.out.println(list);
//[abc1, abc2, abc, abc4]
}
}
List集合遍历方式有三种:迭代器遍历,普通for循环遍历,增强for循环遍历
List接口的数据存储结构:
List的众多子类存储元素所采用的结构方式是不同的,因此导致了众多集合有了各自的特点:
数据存储的常用结构有:堆栈,队列,数组,链表,这里简单介绍下:
堆栈存储结构通俗解释:子弹压进弹夹,先压进去的在下面,后压进去的在上面,开枪的时候,上边的子弹先弹出来,下边的后出来(先进后出)
队列存储结构通俗解释:坐火车排队安检,每个人依次检查,只有前面的人查完,才能轮到后边的人(先进先出)
数组结构:已经接触过很多次,通过索引查找块,不过由于定长,所以增删慢
链表结构:每一个元素分为两部分,一部分记录上一个元素地址,另一部分存储当前元素的信息,使得每一次个元素像自行车链一样连接
查找时候由于需要通过连接的节点,速度慢,不过增删的时候,原理是直接操作地址,不改变本身的结构,所以速度很快
ArrayList集合采用了数组结构存储方式,所以查询快,增删慢,由于线程不安全,运行速度很快,
空参创建初始容量10,可变数组,原理是System的复制数组方法,以及一些其他的操作后进行扩容
LinkedList集合则采用了单向链表的数据结构,所以增删快,查询慢,同样线程不同步,运行速度快
LinkedList提供了大量的首尾操作
示例:
package demo; import java.util.LinkedList; public class LinkedListDemo {
public static void main(String[] args) {
function1();// 添加
function2();// 获取头尾
function3();// 移除并返回开头 } public static void function1() {
LinkedList<String> link = new LinkedList<String>();
link.addLast("a");
link.addLast("b");
link.addLast("c");
link.addLast("d"); link.addFirst("1");
link.addFirst("2");
link.addFirst("3");
System.out.println(link);
// [3, 2, 1, a, b, c, d]
} public static void function2() {
LinkedList<String> link = new LinkedList<String>();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
if (!link.isEmpty()) {
String first = link.getFirst();
String last = link.getLast();
System.out.println(first);//
System.out.println(last);//
}
} public static void function3() {
LinkedList<String> link = new LinkedList<String>();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
String first = link.removeFirst();
String last = link.removeLast();
System.out.println(first);//
System.out.println(last);//
System.out.println(link);// [2, 3]
}
}
还有一个Vector集合,数组结构,是JDK最早的集合,方法和ArrayList基本相同,运行速度慢,所以后来被ArrayList代替,这里不介绍了
Java学习笔记30(集合框架四:List接口)的更多相关文章
- 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素
import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...
- 【Java学习笔记】<集合框架>对字符串进行长度排序
package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...
- 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator
public class Person implements Comparable{ private String name; private int age; public Person(){ su ...
- Java学习笔记之---集合
Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...
- Java学习笔记之集合
集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...
- 【原】Java学习笔记026 - 集合
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...
- JavaSE 学习笔记之集合框架(十八)
集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...
- java学习笔记之集合家族2
集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...
- java学习笔记之集合家族1
集合 集合介绍: 由于数组中存放对象,对对象操作起来不方便.java中有一类容器,专门用来存储对象. 集合与数组的区别: 1.数组的长度固定的,而集合长度时可变的 2.数组只能储存同一类型的元素,而且 ...
- JAVA学习笔记(3)—— 抽象类与接口
1. Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类 ...
随机推荐
- Redux使用教程
在开始之前,需要安装环境,node.js可以使用npm管理包,开发的工具webstorm可以创建相应的项目. 项目中redux是管理全局的同一个store,React-router是管理路由的,这里只 ...
- http://www.36dsj.com/archives/46131
https://docs.growingio.com/Developer%20Document.html https://youdata.163.com/dash/39706/editor?pid=7 ...
- Web Worker模拟抢票
web worker工作原理图: 抢票系统思维导图: 思路:五个人(5个div窗口模拟)同时进行抢票,有百分之十的几率可以抢到票,抢到票后对应的窗口(即随机生成的数大于等于0小于9的情况)会编程天蓝色 ...
- GitLab代码行数统计--统计增加与删除行数
#!/bin/bashmaster_dev='master'date_star='2018-11-01'date_end='2018-11-30'path1=`find /home/gitlab_da ...
- java十进制转换成二进制数
牢记这些呀,特别常用! 1.十进制转成二进制 String s = Integer.toBinaryString(n) //将十进制数转成字符串,例如n=5 ,s = "101" ...
- Python开发【第七篇】:面向对象二
字段 class Foo: #静态字段(保存在类中) CC = 123 def __init__(self): #普通字段(保存在对象中) ...
- 如何配置Java环境变量[转]
https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html
- 156. Binary Tree Upside Down反转二叉树
[抄题]: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left nod ...
- [leetcode]7. Reverse Integer反转整数
Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...
- Linux Curl命令
一.简介 linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 二.安装 wget http://c ...