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 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类 ...
随机推荐
- 23.Hibernate-基础.md
目录 1. ORM和Hibernare 2. 基本开发 2.1 lib 2.2 写对象和引入对象映射 2.2.1 写对象类文件 2.3 配置文件 2.3.1 配置加载映射文件 2.3.2 配置数据库连 ...
- kettle学习笔记(二)——kettle基本使用
一.子程序功能和启动方式介绍 Spoon.bat: 图形界面方式启动作业和转换设计器. Pan.bat: 命令行方式执行转换. Kitchen.bat: 命令行方式执行作业. Carte.bat: 启 ...
- Java学习笔记(十九):Object类
- 视频和swf的相对路径加载,卸载
package com{ import flash.display.MovieClip; import flash.net.NetConnection; import flash.net.NetStr ...
- Python+Selenium学习--案例介绍
1. 前言 前面讲解了那么多selenium的基础知识,下面用一个简单案例来介绍,此案例主要实现,运行测试,自动生成html报告,并发生邮件. 2. 测试案例 2.1 目录结构介绍 conf:配置信息 ...
- 2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015)
题目链接 : http://codeforces.com/gym/100781/attachments A-Adjoin the Network 题意大概是有多棵树(也可能是一颗),现在要把它们合并 ...
- 35 【kubernetes】configMap
kubernetes可以驱动容器的运行,并且把容器的运行放置在kubernetes定义的体系结构中pods这一级. 但是容器运行通常会需要某些参数,比如环境变量或者硬件使用情况. 为了解决对每个con ...
- Linux驱动之异常处理体系结构简析
异常的概念在单片机中也接触过,它的意思是让CPU可以暂停当前的事情,跳到异常处理程序去执行.以前写单片机裸机程序属于前后台程序,前台指的就是mian函数里的while(1)大循环,后台指的就是产生异常 ...
- PB的一些记录
断点设置在函数内,发现返回值没有,需要取消函数内断点才正常 加密--采用矩阵乘法 行列式取+_1的矩阵与逆矩阵其元素都是整数,, 可以使用matlab来找到这些矩阵 A* I =E A ...
- Linux运维40道精华题
题目 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控 ...