Java List 用法详解及实例分析

Java List 用法详解及实例分析

Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解。

  • List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引
  • ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步
  • LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快)
  • Vector:底层是数组数据结构 线程同步(数组长度是可变的百分之百延长)(无论查询还是增删都很慢,被ArrayList替代了)

List:特有的方法,凡是可以操作角标的方法都是该体系特有的方法

boolean add(int index, E element)
boolean addAll(index,Collection)
public static void List_add(){
   ArrayList a1 = new ArrayList();
   a1.add("java");
   a1.add("php");//List集合中的元素可以重复
  a1.add(".net");
   System.out.println("原集合:"+a1);
   a1.add(1, "Flash");
   a1.add(0, "ps");
   System.out.println(a1);

  ArrayList a2 = new ArrayList();
  a2.add("javascript");
  a2.add("3dMax");
  a2.add("IBM");

  a1.addAll(0, a2);
  System.out.println(a1);
}

删除指定位置的元素

boolean remove(int index)
public static void List_remove(){
   ArrayList a1 = new ArrayList();
   a1.add("javascript");
   a1.add("php");
   a1.add("flash");
   System.out.println("原集合:"+a1);

   a1.remove(0);
   System.out.println(a1);
}

修改指定角标的元素  set(int index, E element)  返回的是修改的那个元素

public static void List_set() {
   ArrayList a1 = new ArrayList();
   a1.add("javascript");
   a1.add("php");
   a1.add(".net");
   System.out.println("原集合:"+a1);

   a1.set(1, "falsh");
   System.out.println(a1);
}

get(int index)  返回列表中指定位置的元素
subList(int fromIndex, int toIndex)  返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分元素。
public static void List_get() {
   ArrayList a1 = new ArrayList();
   a1.add("java");
   a1.add("php");
   a1.add("flash");

   System.out.println(a1.get(0));//获取指定角标的元素,有了该方法就可以遍历该集合中的所有元素

   System.out.println(a1.subList(1, 3));//获取集合中某一部分的元素,包含头不包含尾
}

List集合特有的迭代器:ListIterator(是Iterator的子接口)

注意:

在迭代时,是不可以通过集合对象的方法操作集合中的元素因为会发生ConcurrentModificationException异常(并发异常)所以,在迭代器时,只能用迭代器的方法造作元素因为Iterator方法是有限的所以只能对元素进行判断,取出,删除的操作如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator 该接口只能通过List集合的listIterator方法获取

public class ListIteratorDemo {
   public static void main(String[] args) {
     ArrayList a1 = new ArrayList();
     a1.add("java01");
     a1.add("java02");
     a1.add("java03");
     a1.add("java04");

     System.out.println("原集合是:"+a1);

   /*在迭代过程中准备添加或者删除元素
   Iterator it = al.iterator();
   while (it.hasNext()){
     Object obj = it.next();

     if (obj.equals("java02"))
     //al.add("java008");//会出现并发异常,因为迭代器正在操作集合,不能再用集合的方法操作集合了
     it.remove();//将java02的引用从集合中删除了
     System.out.println("obj:"+obj);
    }
    */
  //只有List的listIterator有增,删,改,查这些功能,因为只有List有索引
    ListIterator li = a1.listIterator();
     while (li.hasNext()){
     if(li.next().equals("java02"))
     //li.add("java009");
     li.set("java006");
    }
  }
}

Vector:枚举就是Vector特有的取出方式,跟迭代器很像(其实枚举和迭代是一样的) 已经被迭代器取代

public class VectorDemo {
   public static void main(String[] args) {
     Vector v = new Vector();
     v.add("java01");
     v.add("java02");
     v.add("java03");
     v.add("java04");

     for(Enumeration en = v.elements();en.hasMoreElements();){
      System.out.println(en.nextElement());
    }
  }
}

LinkedList:

特有方法:

addFirst();在头部添加元素

addLast();在尾部添加元素

getFirst(); getLast();

获取元素但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();   removeLast();

获取元素但是删除元素。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6出现了替代方法

offerFirst(); offerLast();

peekFirst(); peekLast(); 获取元素,但是元素不被删除。如果集合中没有元素,会返回null

pollFirst(); pollLast(); 获取元素,但是元素被删除。如果集合中没有元素,会返回null

public class LinkedListDemo {
   public static void main(String[] args) {
     LinkedList link = new LinkedList();
     link.add("java01");
     link.add("java02");
     link.add("java03");
     link.add("java04");

     while(!link.isEmpty()){
      System.out.println((link.removeLast()));
    }
  }
}

以上就是对java list用法的实例详解,本站关于java 的开发文章还有很多,希望大家搜索参考,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2017-07-18

JAVA LinkedList和ArrayList的使用及性能分析

第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口.它代表着有序的队列.AbstractList 是一个抽象类,它继承于AbstractCollection.AbstractList实现List接口中除size().get(int location)之外的函数.AbstractSequentialList 是一个抽象类,它继承于AbstractList.AbstractSequentialList 实现了"链表中,根据index索引值操作链表的全部函数

JSON的String字符串与Java的List列表对象的相互转换

在前端: 1.如果json是List对象转换的,可以直接遍历json,读取数据. 2.如果是需要把前端的List对象转换为json传到后台,param是ajax的参数,那么转换如下所示: var jsonStr = JSON.stringify(list); var param= {}; param.jsonStr=jsonStr; 在后台: 1.把String转换为List(str转换为list) List<T> list = new ArrayList<T>(); JSONAr

java从list中取出对象并获得其属性值的方法

最近公司的项目需要导出csv文件,一个同事用最原始的方式将每条记录取出然后加","解决.但是客户后面要求在每个页面当中都加入这个功能.于是,问题来了,分开写代码太多,合起来又不能确定在list中存储的对象为哪个对象,不能用get方法获得属性.我一直认为当初他那样写就将程序写死了.可是,在多次尝试后,还是通过java的反射从list中取出了对象,从对象中取出了属性值: 下面是代码: 复制代码 代码如下: package com.hb.test; import java.lang.refl

Java集合Set、List、Map的遍历方法

本文实例讲述了Java集合Set.List.Map的遍历方法,分享给大家供大家参考. 具体方法如下: package com.shellway.javase; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.uti

JAVA ArrayList详细介绍(示例)

第1部分 ArrayList介绍ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口.ArrayList 继承了AbstractList,实现了List.它是一个数组队列,提供了相关的添加.删除.修改.遍历等功能.ArrayList 实现了RandmoAccess接口,即提供了随机访问功能.Randmo

java操作mongodb基础(查询 排序 输出list)

复制代码 代码如下: package com.infomorrow.webroot; import java.util.List; import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.MongoClient; public cl

JAVA中list,set,数组之间的转换详解

JAVA的list,set,数组之间的转换,主要是使用Apache Jakarta Commons Collections,具体的方法如下:import org.apache.commons.collections.CollectionUtils; String[] strArray = {"aaa", "bbb", "ccc"};    List strList = new ArrayList();    Set strSet = new Ha

Java中List与Map初始化的一些写法分享

Java的在还没有发现新写法之前时,我一直是这么初始化List跟Map: 复制代码 代码如下: //初始化List    List<string> list = new ArrayList</string><string>();    list.add("www.jb51.net");    list.add("string2");    //some other list.add() code......    list.add

java list用法示例详解

|--List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引,  |-- ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步  |-- LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快)  |-- Vector:底层是数组数据结构 线程同步(数组长度是可变的百分之百延长)(无论查询还是增删都很慢,被ArrayList替代了

Java List 用法实例详解

Java List 用法实例详解 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引 ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步 LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快) Vector:底层

JSON在Java中的相互转换示例详解

什么是JSON? JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. JSON采用完全独立于语言的文本格式,而且很多语言都提供了对json的支持(包括C, C++, C#, Java, JavaScript, Perl, Python等). 这样就使得JSON成为理想的数据交换格式. 数据交换格式,是指客户端和服务器之间通信,传递数据时,数据使用的格式是json JSON在java中的使用 json在ja

python中前缀运算符 *和 **的用法示例详解

这篇主要探讨 ** 和 * 前缀运算符,**在变量之前使用的*and **运算符. 一个星(*):表示接收的参数作为元组来处理 两个星(**):表示接收的参数作为字典来处理 简单示例: >>> numbers = [2, 1, 3, 4, 7] >>> more_numbers = [*numbers, 11, 18] >>> print(*more_numbers, sep=', ') 2, 1, 3, 4, 7, 11, 18 用途: 使用 * 和

vue+webpack实现异步加载三种用法示例详解

1.第一例 const Home = resolve => { import("@/components/home/home.vue").then( module => { resolve(module) } } 注:(上面import的时候可以不写后缀) export default [{ path: '/home', name:'home', component: Home, meta: { requireAuth: true, // 添加该属性可以判断出该页面是否需要

Java ThreadLocal用法实例详解

本文实例讲述了Java ThreadLocal用法.分享给大家供大家参考,具体如下: 目录 ThreadLocal的基本使用 ThreadLocal实现原理 源码分析(基于openjdk11) get方法: setInitialValue方法 getEntry方法 set方法 ThreadLocalMap的set方法 replaceStaleEntry方法 cleanSomeSlots方法 rehash方法 expungeStaleEntries方法 resize方法 ThreadLocal实现

java return用法实例详解

return用法总结: 一.在有返回值的方法中,返回方法指定类型的值,同时结束方法执行: 二.也可以用在返回值为void的方法中,用来终止方法运行: break和return break是用来跳出循环的,例如for,while,do-while都可以跳出,但不跳出函数 return是使整个函数返回的,后面的不管是循环里面还是循环外面的都不执行 1.可以在具有对象引用返回类型的方法中返回null public Button doStuff(){ return null: } 2.数组是完全合法的返

go语言Timer计时器的用法示例详解

计时器用来定时执行任务,分享一段代码: package main import "time" import "fmt" func main() { //新建计时器,两秒以后触发,go触发计时器的方法比较特别,就是在计时器的channel中发送值 timer1 := time.NewTimer(time.Second * 2) //此处在等待channel中的信号,执行此段代码时会阻塞两秒 <-timer1.C fmt.Println("Timer 1

python中reload(module)的用法示例详解

前言 本文主要给大家介绍了关于python中reload(module)用法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.Python2中可以和Python3中关于reload()用法的区别. Python2 中可以直接使用reload(module)重载模块. Pyhton3中需要使用如下方式: (1) >>> from imp >>> imp.reload(module) (2) >>> from imp imp

java反射机制示例详解

1.什么是反射?一个类有多个组成部分,例如:成员变量,方法,构造方法等.反射就是加载类,并解剖出类的各个组成部分. 2.加载类java中有一个Class类用于代表某一个类的字节码.Class类既然代表某个类的字节码,那就要提供加载某个类字节码的方法:forName().   此方法用于加载某个类的字节码到内存中,并使用class对象进行封装.另外2种得到class对象的方式:类名.class对象.getClass() 先创建一个简单的Person类 复制代码 代码如下: public class