Java集合之List集合

来源:互联网 发布:js登陆界面 编辑:程序博客网 时间:2024/05/18 13:26
一、List集合的特点及常见用法
(1)元素有序,可重复,每个元素有其对应的索引(从0开始)
(2)List判断2元素相等只需equals()返回true
import java.util.ArrayList;import java.util.List;public class ListTest {public static void main(String[] args) {// TODO 自动生成的方法存根List books=new ArrayList();books.add(new String("java"));books.add(new String("hahahaha"));books.add(new String("hello"));books.add(new String("666"));System.out.println(books);books.add(1,new String("插入到第二个位置"));for(int i=0;i<books.size();i++){System.out.print(books.get(i)+",");}System.out.println("hahahaha元素的位置"+books.indexOf(new String("hahahaha")));books.set(1, new String("替换元素"));//此方法不会改变list的长度System.out.println(books);books.sort((o1,o2)->((String)o1).length()-((String)o2).length());System.out.println("排序"+books);}}
(3)List还提供了一个listIterator()方法遍历
import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class ListIteratorTest {public static void main(String[] args) {// TODO 自动生成的方法存根String[] books={"Android","java","c++","ios"};List booklist=new ArrayList();for(int i=0;i<books.length;i++){booklist.add(books[i]);}ListIterator listIterator=booklist.listIterator();while (listIterator.hasNext()) {System.out.println(listIterator.next());}System.out.println("反向迭代");while(listIterator.hasPrevious()){System.out.println(listIterator.previous());}}}


二、ArrayList和Vector
(1)都是基于数组实现的,封装了一个动态的、允许再分配的Object[]数组
(2)自动增加长度(initialCapacity参数),初始化时没有指定默认10
(3)他们两个用法几乎完全相同(vector比较古老,性能较差,尽量少用)
(4)ArrayList线程不安全,Vector线程安全(但是也不建议使用Vector,可以使用Collections工具类将ArrayList线程变得安全)
(5)Vector提供了stack用来模拟栈这种数据结构(但是也不推荐使用,可以用ArrayDeque)

三、Queue集合
(1)模拟队列结构(FIFO)
(2)PriorityQueue实现类会将队列元素从小到大排序(与TreeSet类似也可以自然排序,定制排序)
import java.util.PriorityQueue;public class PriorityQueueTest {public static void main(String[] args) {// TODO 自动生成的方法存根PriorityQueue priorityQueue=new PriorityQueue();priorityQueue.add(1);priorityQueue.add(3);priorityQueue.add(-8);priorityQueue.add(-1);System.out.println(priorityQueue);}}

(3)Deque接口和ArrayDeque实现类(双端队列,可从两端操纵队列,实现了栈和队列)
import java.util.ArrayDeque;public class ArrayDequetest {public static void main(String[] args) {// TODO 自动生成的方法存根//模拟栈ArrayDeque stack=new ArrayDeque();stack.push("java");stack.push("android");System.out.println(stack);//读取第一个元素但是并不pop()System.out.println(stack.peek());//popSystem.out.println(stack.pop());System.out.println(stack);//模拟队列ArrayDeque queue=new ArrayDeque();queue.offer("haha");queue.offer("2333");queue.offer("666");System.out.println(queue);System.out.println(queue.peek());System.out.println(queue.poll());System.out.println(queue);}}

四、LinkedList
(1)既是list,也继承了Deque接口
(2)很强大,但是使用了链表结构,因此随机访问性能较差,插入删除性能较强

五、线性表性能分析
(1)一般来说数组一连续的内存存储元素,所以随机访问时性能最好,而链表插入删除性能较强。总体是ArrayList性能比LinkedList好。
(2)如果遍历集合元素,对于ArrayList和Vector应使用随机访问方法(get),对于LinkedList应使用迭代器(Iterator)。
(3)如要经常插入删除包含大量数据的list集合的大小,应用LinkedList。
(4)多线程时应用Collections将集合包装成线程安全的集合)
1 0