List中的元素是有序排列的而且可重复

1.LinkedList

LinkedList是非线程安全的,底层是基于双向链表实现的

      LinkedList常用方法:

  •     toArray()  以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
  •     size()  返回此列表中的元素数
  •     set(int index,E element)  用指定的元素替换此列表中指定位置的元素
  •     removeLast()  从此列表中删除并返回最后一个元素
  •     removeFirst()  从此列表中删除并返回第一个元素
  •     remove(int index)  删除该列表中指定位置的元素
  •     getFirst()  返回此列表中的第一个元素
  •     getLast()  返回此列表中的最后一个元素
  •     get(int index)  返回此列表中指定位置的元素
  •     add(E element)  将指定的元素追加到此列表的末尾
  •     add(int index,E element)  在此列表中的指定位置插入指定的元素
  •     addFirst(E element)  在该列表开头插入指定的元素
  •     addLast(E element)   将指定的元素追加到此列表的末尾
  •     clear()  从列表中删除所有元素

2.ArrayList

ArrayList是非线程安全的,底层是基于数组实现

     ArrayList常用方法:

  •    toArray()  以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
  •    subList(int fromIndex,int toIndex)  返回此列表中指定的 fromIndex (包括)和 toIndex之间的独占视图
  •    size()  返回此列表中的元素数
  •    set(int index,E element)  用指定的元素替换此列表中指定位置的元素
  •    removeRange(int fromIndex,int toIndex)  从这个列表中删除所有索引在 fromIndex (含)和 toIndex之间的元素
  •    remove(int index)  删除该列表中指定位置的元素
  •    isEmpty()  如果此列表不包含元素,则返回true
  •    get(int index)  返回此列表中指定位置的元素
  •    add(E element)  将指定的元素追加到此列表的末尾
  •    add(int index,E element)  在此列表中的指定位置插入指定的元素
  •    clear()  从列表中删除所有元素
package com.gather;
/**
* 人实体类
* @author yyx
* 2019年2月27日
*/
public class Person {
private String userName;
private Integer userAge; public Person(String userName, Integer userAge) {
super();
this.userName = userName;
this.userAge = userAge;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public Integer getUserAge() {
return userAge;
} public void setUserAge(Integer userAge) {
this.userAge = userAge;
} @Override
public String toString() {
return "Person [userName=" + userName + ", userAge=" + userAge + "]";
} }
package com.gather;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; /**
*
* @author yyx 2019年2月27日
*/
public class LIstPractise {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
Person p1 = new Person("张三", 22);
Person p2 = new Person("李四", 23);
Person p3 = new Person("王五", 18);
list.add(p1);
list.add(p2);
list.add(p3); // 第一种遍历方式:for循环
for (int i = 0; i < list.size(); i++) {
Person person = list.get(i);
System.out.println(person);
}
System.out.println("----------------");
// 第二种遍历方式:foreach
for (Person person : list) {
System.out.println(person);
}
System.out.println("----------------");
// 第三种遍历方式:Iterator
Iterator<Person> iterator = list.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.println(person);
}
System.out.println("----------------"); LinkedList<Person> linkedList=new LinkedList<>();
linkedList.addFirst(p3);
linkedList.add(p2);
linkedList.addLast(p1); //getFirst() 返回此列表中的第一个元素
System.out.println(linkedList.getFirst());
//getLast() 返回此列表中的最后一个元素
System.out.println(linkedList.getLast());
System.out.println("----------------"); //toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
Object[] persons=linkedList.toArray();
System.out.println(persons[0]);
}
} 

   3.ArrayList和LinkedList的区别

  • ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构 
  • 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针 
  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
  • ArrayList没有实现Queue队列接口,LinkedList实现了Queue接口

4.Vector

Vector是线程安全的,底层是基于动态数组实现

     Vector常用方法:

  •       add(E element)  将指定的元素追加到此Vector的末尾
  •       add(int index,E element)  在此Vector中的指定位置插入指定的元素 
  •       elementAt(int index)  返回指定索引处的组件
  •       get(int index)  返回此向量中指定位置的元素
  •       removeElementAt(int index)  删除指定索引处的组件
  •       removeRange(int fromIndex,int toIndex) 从此列表中删除所有索引为 fromIndex (含)和 toIndex之间的元素
package com.gather;

import java.util.Iterator;
import java.util.Vector;
/**
* 大小可以动态变化,其存储由容器自动处理
* @author yyx
* 2019年2月28日
*/
public class VectorPractise {
public static void main(String[] args) {
Vector<Person> vector = new Vector<>();
Person p1 = new Person("张三", 22);
Person p2 = new Person("李四", 23);
Person p3 = new Person("王五", 18);
vector.add(p1);
vector.add(p2);
vector.add(p3); Iterator<Person> iterator = vector.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.println(person);
}
}
}

     

Java集合-----List详解的更多相关文章

  1. java集合框架详解

    java集合框架详解 一.Collection和Collections直接的区别 Collection是在java.util包下面的接口,是集合框架层次的父接口.常用的继承该接口的有list和set. ...

  2. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...

  3. Java—集合框架详解

    一.描述Java集合框架 集合,在Java语言中,将一系类的对象看成一个整体. 首先查看jdk中的Collection类的源码后会发现Collection是一个接口类,其继承了java迭代接口Iter ...

  4. JAVA集合类型详解

    一.前言 作为java面试的常客[集合类型]是永恒的话题:在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了:导致这一些集合类型的理论有可能经常的忘 ...

  5. Java集合-----Set详解

    Set是没有重复元素的集合,是无序的 1.HashSet HashSet它是线程不安全的       HashSet常用方法:   add(E element)  将指定的元素添加到此集合(如果尚未存 ...

  6. Java集合-----Map详解

          Map与Collection并列存在.用于保存具有映射关系的数据:Key-Value      Map 中的 key 和  value 都可以是任何引用类型的数据      Map 中的 ...

  7. java集合(2)- java中HashMap详解

    java中HashMap详解 基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 H ...

  8. Java集合中List,Set以及Map等集合体系详解

    转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ...

  9. 最新java数组的详解

    java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...

随机推荐

  1. Asp.net中"正在中止线程"错误解决方法

    项目中出现“正在中止线程”问题,百度后台发现,都是因为用到Response.End.Response.Redirect 或 Server.Transfer 方法. 原因: Response.End 方 ...

  2. nodejs 学习二, nodejs调试

    nodejs 调试,在官方文档(英文),常用的两种: 一个在chrome安装插件inspector 第二种利用编辑 这里我使用vscode编辑来调试. 主要是配置 launch.json(用vscod ...

  3. Java与openssl的RSA算法

    1.java生成的公私钥格式为 pkcs8(PKCS8EncodedKeySpec), 而openssl默认生成的公私钥格式为 pkcs1 2.java采用的rsa默认补齐方式是pkcs1 (RSA/ ...

  4. 【叶问】MySQL误删除frm文件该怎么办?

    MySQL误删除frm文件该怎么办?情况一:误删后还未重启MySQL1.从proc中恢复.frm文件cp /proc/`pidof mysqld`/fd/误删除的.frm /datadir/db/对应 ...

  5. 前端 HTML 标签分类

    三种: 1.块级标签: 独占一行,可设置宽度,高度.如果设置了宽度和高度,则就是当前的宽高.如果宽度和高度没有设置,宽度是父盒子的宽度,高度根据内容填充. 2.行内标签:在一行内显示,不能设置宽度,高 ...

  6. 20170724 Airflow官网资料学习

    -- 1  Apache Airflow 文档 AirFlow 对编程人员来讲就是一个平台,用于进行日程安排和监控.但是还在卵化期,严格来说,不是一个完整的成品.

  7. PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法

    一.数字补0. 如果要自动生成学号,自动生成某某编号,就像这样的形式“d0000009”.“d0000027”时,那么就会面临一个问题,怎么把左边用0补齐成这样8位数的编码呢?我想到了两种方法实现这个 ...

  8. 遇到Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的情况

    一.问题及原因 有这样一种调用逻辑:A.exe调用B.dll.现在想要在B的源代码中打断点,从A发起进行调试,却给出了"当前不会命中断点.还没有为该文档加载任何符号"的提示.感觉十 ...

  9. golang 的 buffered channel 及 unbuffered channel

    The channel is divided into two categories: unbuffered and buffered. (1) Unbuffered channelFor unbuf ...

  10. 后续使用dubbo的必要性的思考

    要做微服务,要做分布式,就得先解决网络调用即rpc的问题