javalist常用方法(Java创建一个list几种方法)

admin 532 0

本篇文章给大家谈谈javalist常用方法,以及Java创建一个list几种方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

一、JAVA中的List的使用

List<E>([]内的内容可省略),与数组类似:

实例化:List[<数据类型>] list= new ArrayList[<数据类型>]();

获得集合内元素个数:list.size();

指定下标添加(添加后下标后的元素向后挪一位):list.add(index,e);

直接删除指定下标的元素(只删除找到的第一个相符合的元素):list.remove(index);

替换元素(替换掉指定下标的元素):list.set(index,e);

判断集合中是否存在某个元素(存在返回true,不存在返回false):list.contains(e);

两个对象一定相等:list.equals(list2);

两个对象不一定相等:list.hashCode()== list2.hashCode();

(两个相等对象的equals方法一定为true,但两个hashcode相等的对象不一定是相等的对象。)

元素存在则返回找到的第一个元素的下标,不存在则返回-1:list.indexOf(e);

元素存在则返回找到的最后一个元素的下标,不存在则返回-1:list.lastIndexOf(e);

判断集合是否为空(空则返回true,非空则返回false):list.isEmpty();

返回Iterator集合对象:list.iterator();

将集合转换为字符串:list.toString();

截取集合(从fromIndex开始在toIndex前结束,[fromIndex,toIndex)):list.subList(fromIndex,toIndex);

指定类型(objects为指定类型的数组对象,并将转换好的数组赋值给objects数组):list.toArray(objects);

二、Java的List如何实现线程安全

1、Collections.synchronizedList(names);效率最高,线程安全

2、Java的List是我们平时很常用的集合,线程安全对于高并发的场景也十分的重要,那么List如何才能实现线程安全呢?

3、首先大家会想到用Vector,这里我们就不讨论了,首先讨论的是加锁,例如下面的代码

4、private List<String> names= new LinkedList<>();

5、public synchronized void addName(String name){

6、public String getName(Integer index){

7、Lock lock=new ReentrantLock();

8、synchronized一加,或者使用lock可以实现线程安全,但是这样的List要是很多个,代码量会大大增加。

9、CopyOnWrite写入时复制,它使一个List同步的替代品,通常情况下提供了更好的并发性,并且避免了再迭代时候对容器的加锁和复制。通常更适合用于迭代,在多插入的情况下由于多次的复制性能会一定的下降。

10、final ReentrantLock lock= this.lock;//加锁只允许获得锁的线程访问

11、Object[] elements= getArray();

12、//创建个长度加1的数组并复制过去

13、Object[] newElements= Arrays.copyOf(elements, len+ 1);

14、setArray(newElements);//设置内部的数组

15、Collections中有许多这个系列的方法例如

16、主要是利用了装饰者模式对传入的集合进行调用 Collotions中有内部类SynchronizedList

17、 static class SynchronizedList<E>

18、extends SynchronizedCollection<E>

19、private static final long serialVersionUID=-7754090372962971524L;

20、SynchronizedList(List<E> list){

21、synchronized(mutex){return list.get(index);}

22、public E set(int index, E element){

23、synchronized(mutex){return list.set(index, element);}

24、public void add(int index, E element){

25、synchronized(mutex){list.add(index, element);}

26、synchronized(mutex){return list.remove(index);}

27、static class SynchronizedCollection<E> implements Collection<E>, Serializable{

28、private static final long serialVersionUID= 3053995032091335093L;

29、final Collection<E> c;// Backing Collection

30、final Object mutex;// Object on which to synchronize

31、这里上面的mutex就是锁的对象在构建时候可以指定锁的对象主要使用synchronize关键字实现线程安全

32、static class SynchronizedList<E>

33、extends SynchronizedCollection<E>

34、private static final long serialVersionUID=-7754090372962971524L;

35、SynchronizedList(List<E> list){

36、SynchronizedList(List<E> list, Object mutex){

37、这里只是列举SynchronizedList,其他类类似,可以看下源码了解下。

38、public static void main(String[] args){

39、List<String> names= new LinkedList<>();

40、long a= System.currentTimeMillis();

41、List<String> strings= new CopyOnWriteArrayList<>(names);

42、for(int i= 0; i< 100000; i++){

43、long b= System.currentTimeMillis();

44、//同步方法2装饰器模式使用 synchronized

45、List<String> synchronizedList= Collections.synchronizedList(names);

46、for(int i= 0; i< 100000; i++){

47、synchronizedList.add("param2");

48、long c= System.currentTimeMillis();

49、System.out.println("CopyOnWriteArrayList time=="+(b-a));

50、System.out.println("Collections.synchronizedList time=="+(c-b));

51、两者内部使用的方法都不一样,CopyOnWriteArrayList内部是使用lock进行加锁解锁完成单线程访问,synchronizedList使用的是synchronize

52、进行了100000次添加后时间对比如下:

53、可以看出来还是使用了synchronize的集合工具类在添加方面更加快一些,其他方法这里篇幅关系就不测试了,大家有兴趣去试一下。

三、javaarraylist的方法有哪些

1、将指定的元素添加到此列表的尾部。

2、void add(int index, E element)

3、将指定的元素插入此列表中的指定位置。

4、boolean addAll(Collection<? extends E> c)

5、按照指定 collection的迭代器所返回的元素顺序,将该 collection中的所有元素添加到此列表的尾部。

6、boolean addAll(int index, Collection<? extends E> c)

7、从指定的位置开始,将指定 collection中的所有元素插入到此列表中。

8、返回此 ArrayList实例的浅表副本。

9、如果此列表中包含指定的元素,则返回 true。

10、void ensureCapacity(int minCapacity)

11、如有必要,增加此 ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。

12、返回此列表中指定位置上的元素。

13、返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回-1。

14、如果此列表中没有元素,则返回 true

15、返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回-1。

16、移除此列表中指定位置上的元素。

17、移除此列表中首次出现的指定元素(如果存在)。

18、protected void removeRange(int fromIndex, int toIndex)

19、移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。

20、用指定的元素替代此列表中指定位置上的元素。

21、按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

22、按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

23、将此 ArrayList实例的容量调整为列表的当前大小。

24、从类 java.util.AbstractList继承的方法

25、equals, hashCode, iterator, listIterator, listIterator, subList

26、从类 java.util.AbstractCollection继承的方法

27、containsAll, removeAll, retainAll, toString

28、从类 java.lang.Object继承的方法

29、finalize, getClass, notify, notifyAll, wait, wait, wait

30、从接口 java.util.List继承的方法

31、containsAll, equals, hashCode, iterator, listIterator, listIterator, removeAll, retainAll, subList

四、JAVA中list的数值传递的方法

因为引用是传址的,所以如果你需要改变其中之一,却不去改变另一个,那么就不能对list中的元素直接使用=号赋值,而需要实行深度克隆。深度克隆最为稳妥的方式就是序列化,但是效率稍低,或者采用自己控制克隆深度的方法。自己看看书,如果还是不明白,我明天回去给你解答。

五、java中list的使用方法

LIST是个容器接口,可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数,用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型,容器还对应get(),remove()方法来获取和删除数据成员

六、java开发中能不能再一个方法里获取list数据和总条数

1、可以通过size方法获取到总条数,可以通过get方法获取到数据内容(即可是任何对象)。

2、实体类型如果为数组的话,可以直接通过list的add方法进行添加转换,举例:

3、List<Object[]> list= new ArrayList<Object[]>();//定义一个数组类型的list对象

4、String[] entity= new String[10];//创建一个要实体化的数组对象

5、list.add(entity);给list对象赋值,这样就完成了对象的转换

6、可以获取到list的数据:list.get(0),结果就是entity对象。

7、备注:因为Object类型是任何对象类型的父类,所以不需要强制转换即可完成添加。

七、java中list集合中contains()的用法,啥意思

1、java中list集合中contains()()的用法为:

public boolean list.contains(Object o)

意思为:当前列表若包含某元素,返回结果为true,若不包含该元素,返回结果为false。

2、contains()方法实现的具体细节为:

当list调用contains()方法并传递一个元素时,会执行遍历,逐个对比item是否等于该元素,当遍历结束后,如果还没有一个元素等于该元素的值,则返回false,否则返回true

3、java中list集合中contains()用法的代码示例为:

public static void main(String[] args){

ArrayList<Integer> arrlist= new ArrayList<Integer>();

boolean res= arrlist.contains(10);

实际上,List调用contains(Object obj)方法时,会遍历List中的每一个元素,然后再调用每个元素的equals()方法去跟contains()方法中的参数进行比较,如果有一个元素的equals()方法返回true则contains()方法返回true,否则所有equals()方法都不返回true,则ontains()方法则返回false。因此,重写了Course类的equals()方法,否则,testListContains()方法的第二条输出为false。

当调用HashSet的contains(Object obj)方法时,其实是先调用每个元素的hashCode()方法来返回哈希码,如果哈希码的值相等的情况下再调用equals(obj)方法去判断是否相等,只有在这两个方法所返回的值都相等的情况下,才判定这个HashSet包含某个元素。因此,需重写Course类的hashCode()方法和equals()方法。

参考资料来源:Java官方文档-Interface List

关于javalist常用方法,Java创建一个list几种方法的介绍到此结束,希望对大家有所帮助。