当前位置:   article > 正文

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

arraylist与vector的用法

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中一样,就不多写了*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

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);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

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迭代器来对数组进行迭代*/
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/322034
推荐阅读
相关标签
  

闽ICP备14008679号