您的位置:首页 > 编程语言 > Java开发

java中ArrayList,LinkedList和Vector类的异同以及部分使用方法

2019-08-19 20:40 459 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_45314170/article/details/99753899

ArrayList,LinkedList和Vector

众所周知,List集合是我们常用的java工具,那么今天就来说说List,讲到List就不得不说其下的三个实现类:ArrayList,LinkedList和Vector,这三个有什么区别呢?下面就来说说:

ArrayList:是基于动态数组的实现,内部的实现基于数组完成,因此在进行元素查找的时候只需要根据元素的索引即可快速找到,但是在更新时或者插入时,由于数组结构是连续的,元素一旦向中间插入,则后续的元素需要整体后移,效率低。ArrayList是线程不同步的实现,在多线程并发操作时不能保证数据的安全,但是效率高;另外ArrayList在进行容量扩充是增长原来的1.5倍(增长原来长度的一半);线程安全的ArrayList可以使用

java.util.concurrent.CopyOnWriteArrayList

LinkedList:是基于双链表的实现,集合中元素的组织是通过元素的首尾指针连接,在进行数据修改时只需要改动指针的指向即可轻松实现,但是在进行查询的时候,需要从链表头依次搜索,因此修改时,效率较低.

**Vector:**和ArrayList一样也是基于动态数组的实现,但是Vector是老式JDK(JDK1.0)中的一个动态数组类,提供的是一些线程安全(线程同步)的集合操作,因此,在多线程并发时,对数据的安全性会有一定保障,但是带来的影响就是效率低;另外Vector当容量不足时会在原来长度的基础上增长一倍(ArrayList增长一半)

文字说得再多始终比不上实际例子来得实际,那么,上代码:

public class ArrayListDemo {

public static void main(String[] args) {
/**定义一个ArrayList数组*/
List<Integer> list = new ArrayList<>();
/**向ArrayList中添加数据(整型),可以添加任何类型的数据*/
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
list.add(60);

List<Integer> list2 = new ArrayList<>();
list2.add(100);
list2.add(200);
/**向ArrayList中添加ArrayList数组*/
list.addAll(list2);

System.out.println(list.contains(100));

//		for (Integer integer : list) {
//			list.remove(integer);
//		}

/**不允许在对集合遍历时调用集合的remove方法更改元素,会抛出一ConcurrentModificationException*/
/**如果需要在遍历时删除,因该调用通过集合获取的迭代器对象自生的remove方可更改*/
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
int i = it.next();
/**remove前要确保next()获取过元素,否则会出现IllegalStateException*/
it.remove();
}
/**判断ArrayList是否为空*/
System.out.println(list.isEmpty());
/**迭代器迭代*/
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("============");
/**已按顺序将迭代器中的数据读出,所以不会输出数据*/
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("================");
/**从前往后读数据*/
ListIterator its = list.listIterator();
while(its.hasNext()){
System.out.println(its.next());
}
System.out.println("==================");
/**从后往前读数据*/
while(its.hasPrevious()){
System.out.println(its.previous());
}
/**获取指定位置的元素*/
System.out.println(list.get(5));
/**对ArrayList进行排序,用到了匿名内部类,需注意比较的数值类型不同,获取返回值的方法也不同*/
list.sort(new Comparator(){
@Override
public int compare(Object o, Object o1) {
return o-o1;
}});
}
}
/**除此之外还可调用set,size,remove,indexOf,lastIndexOf方法,用法与LinkedList和Vector中一样,就不多写了*/

LinkedList的常用方法:

public class LinkedListDemo {
public static void main(String[] args) {

LinkedList<String> list = new LinkedList<>();
/**添加元素*/
list.add("Tom");
list.add("Jureey");
list.add("Henry");
list.add("Wappy");
list.add("Henyuv");
/**获取指定位置的元素,但是顺序不是添加的顺序*/
System.out.println(list.get(1));
/**从LinkList中取出一个元素,取出的元素就不再属于LinkList*/
System.out.println(list.pop());
/**将元素添加到栈中*/
list.push("Langth");
System.out.println(list);
/**获取最后一位的元素,也可以用list.get(list.size()-1)*/
System.out.println(list.getlast());
/**获取第一个元素*/
System.out.println(list.peek());
/**删除指定位置的元素,还可以删除指定元素list.remove(Object o); 删除第一个元素list.remove();*/
list.remove(2);
System.out.println(list);
/**将指定位置的元素替换为指定元素*/
list.set(2, "fdas");
System.out.println(list);
/**获取栈的长度*/
System.out.println(list.size());
/**遍历表内元素*/
for (String s : list) {
System.out.println(s);
}
/**查找并删除第一个元素*/
System.out.println(list.poll());
System.out.println(list);
/**将指定元素添加的列表的最后一位*/
list.offer("fdsaa");
System.out.println(list);
/**清空表内所有元素*/
list.clear();
System.out.println(list);
}
}

Vector的常用方法:

public class VectorDemo {

public static void main(String[] args) {
/**早期的线程安全的数组,用法差不多*/
Vector<String> v = new Vector<>();
/**将指定的元素追加到此Vector的末尾。*/
v.add("Tom");
v.add("Jureey");
v.add("Henry");
v.add("Wappy");
v.add("Henyuv");

System.out.println(v);
/**向指定位置添加元素*/
v.add(3, "fdsd");
System.out.println(v);
/**获取指定位置的元素*/
System.out.println(v.get(3));
/**查找指定元素在数组中第一次出现的索引,如果此元素不存在,则返回-1。*/
/**查找指定元素在数组中最后一次出现的索引,v.indexOf("Tom")*/
System.out.println(v.indexOf("Tom"));
/**返回数组的长度*/
System.out.println(v.size());
/**删除表所有数据*/
v.clear();
System.out.println(v);
/**除此之外,Vector同样可以调用Iterator迭代器来对数组进行迭代*/
}
}

我只是写了一小部分方法,还有不少方法,可以在API文档中查看,谢谢观看!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐