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. Appium入门(3)__ Appium Server安装

    安装Appium 1.下载并安装:https://bitbucket.org/appium/appium.app/downloads/ 2. 系统变量PATH 增加 C:\Program Files ...

  2. java 线程(六)死锁

    package cn.sasa.demo4; public class ThreadDemo { public static void main(String[] args){ DeadLockRun ...

  3. 洛谷P2303 [SDOi2012] Longge的问题 数论

    看懂了题解,太妙了TT但是想解释的话可能要很多数学公式打起来太麻烦了TT所以我就先只放代码具体推演的过程我先写在纸上然后拍下来做成图片放上来算辣quq 好的那我先滚去做题了做完这题就把题解放上来.因为 ...

  4. 【Python基础】Pycharm默认快捷键

    PyCharm常用快捷键和设置 代码快速运行: Alt+Shift+F10  编辑代码的时候经常的要换下一行,但是光标没有在行末,可以用这个命令直接换行: Shift+Enter 行注释/取消行注释: ...

  5. Linux下高并发socket最大连接数各种限制的调优

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  6. 004-Quartz存储与持久化-基于quartz.properties的配置

    一.概述 Quartz提供两种基本作业存储类型.第一种类型叫做RAMJobStore,第二种类型叫做JDBC作业存储.在默认情况下Quartz将任务调度的运行信息保存在内存中,这种方法提供了最佳的性能 ...

  7. 三角形的优雅值(map和哈希表)

    给你 n 个三角形,每个三角形有一个优雅值,然后给出一个询问,每次询问一个三角形,求与询问的三角形,相似的三角形中的优雅值最大是多少.★数据输入第一行输入包括 n 一个数字,接下来 n 行,每行四个整 ...

  8. 小睿开始呼叫用户,然后FS怎么跟用户交互的整个流程原理

    学习从小睿开始呼叫用户,然后FS怎么跟用户交互的整个流程原理;     1.小睿向欣方新发起呼叫请求;     2.欣方新可以通过线路发起SIP协议请求,来呼叫用户;     3.当用户接通后,将建立 ...

  9. golang 中的 sizeof 以及 golang中的 union

    golang 中的 sizeof: 1: int(unsafe.Sizeof(uint32(0))) 2: int(reflect.TypeOf(uint32(0)).Size()) golang中的 ...

  10. 关于SimpleDateFormat时间转换总是显示1970年的问题

    今天遇到了一个奇怪的问题, long time = 1488606363; Date date = new Date(time); java.text.SimpleDateFormat sDateFo ...