JAVASEday10 集合之List

it2022-05-05  108

List集合

List代表一个元素有序,可重复的集合,集合中的每个元素都有对应的索引,可以通过索引来访问指定位置的元素,List主要的实现类有ArrayList,Vector,LinkedList List三个子类的特点:

ArrayList:底层数据结构是数组,查询快,增删慢,县城不安全,效率高Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低LinkedList:底层数据结构是链表,查询慢,增删块,线程不安全,效率高

List

方法:

void add(int index,E element): 在指定索引处添加元素E remove(int index):移除指定索引处的元素 返回的是移除的元素E get(int index):获取指定索引处的元素E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素 List list = new ArrayList(); //多态 list.add("a"); //List里面特有的一个添加元素的方法,可以指定索引 list.add(0,"s"); list.add(1,"d"); list.add("a"); System.out.println(list); //移除元素 list.remove("a"); list.remove(0); //List里面特有的方法,根据索引移除元素 System.out.println(list); System.out.println(list.get(0)); list.set(0,"0"); System.out.println(list);

运行结果:

List集合的遍历

for循环遍历 List list=new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); System.out.println(); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+"\t"); }

运行结果:

迭代器遍历 List list=new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); Iterator iterator=list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); }

运行结果:

使用List自己的迭代器遍历,此迭代器可以进行逆向遍历,但是在逆向遍历前应该先进性正向遍历 List list=new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); ListIterator listIterator=list.listIterator(); while (listIterator.hasNext()){ System.out.print(listIterator.next()+"\t"); } System.out.println(); while (listIterator.hasPrevious()){ System.out.print(listIterator.previous()+"\t"); }

运行结果:

ArrayList

方法:

lastIndexOf (Object o) 返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 - 1subList(startindex,endindex); 根据起始索引,终止索引,截取一部分元素到新集合中clone(); 克隆一个新集合 ArrayList list = new ArrayList(); list.add(100); list.add(200); list.add(300); list.add(30); list.add(10); list.add(109); list.add(30); //根据起始索引,终止索引,截取一部分元素到新集合中 List list1 = list.subList(0, 2); System.out.println(list1); //克隆一个集合 Object clone = list.clone(); System.out.println(clone); List list2 = list.subList(0, list.size()); System.out.println(list2);

运行结果:

遍历ArrayList
ArrayList list = new ArrayList(); list.add(100); list.add(200); list.add(300); list.add(30); list.add(10); list.add(109); list.add(30); //遍历ArrayList Iterator iterator = list.iterator(); ListIterator listIterator = list.listIterator(); //for循环遍历 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("--------------------"); //JDK1.8 提供了一个内部迭代的方式 list.forEach(new Consumer() { @Override public void accept(Object o) { System.out.println(o); } });

运行结果:

Vector

Vector 底层数据结构是数组,查循快,增删慢 线程安全,效率低

void addElement (E obj) 将指定的组件添加到此向量的末尾,将其大小增加 1。E elementAt ( int index) 返回指定索引处的组件Enumeration elements () 返回此向量的组件的枚举。E firstElement () 返回此向量的第一个组件(位于索引 0)处的项)。E lastElement () 返回此向量的最后一个组件。void removeAllElements () 从此向量中移除全部组件,并将其大小设置为零。boolean removeElement (Object obj) 从此向量中移除变量的第一个(索引最小的)匹配项。void removeElementAt ( int index) 删除指定索引处的组件。 Vector vector = new Vector(); vector.add("你好"); vector.addElement("我不好"); Object o = vector.get(0); Object o1 = vector.elementAt(0); System.out.println(o); System.out.println(o1); Object o2 = vector.firstElement(); Object o3 = vector.get(vector.size() - 1); Object o4 = vector.lastElement(); System.out.println(o2); System.out.println(o3); System.out.println(o4); System.out.println("-------------------------"); //vector.clear(); // vector.removeAllElements(); //System.out.println(vector); //Vector 他自己特有的一个迭代器 Enumeration elements = vector.elements(); while (elements.hasMoreElements()){ Object o5 = elements.nextElement(); System.out.println(o5);

LinkedList

底层数据结构是链表,查询慢,增删块,线程不安全,效率高

方法:

getFirst () 返回此列表的第一个元素getLast () 返回此列表的最后一个元素peek() 获取但不移除此列表的头(第一个元素)peekFirst () 获取但不移除此列表的第一个元素;如果此列表为空,则返回 nullpoll () 获取并移除此列表的头(第一个元素)pollFirst () 获取并移除此列表的第一个元素;如果此列表为空,则返回 nullpollLast () 获取并移除此列表的最后一个元素;如果此列表为空,则返回 nullpop () 从此列表所表示的堆栈处弹出一个元素push (E e) 将元素推入此列表所表示的堆栈removeLast () 移除并返回此列表的最后一个元素removeFirst () 移除并返回此列表的第一个元素addFirst (E e) 将指定元素插入此列表的开头addLast (E e) 将指定元素添加到此列表的结尾 LinkedList list=new LinkedList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); System.out.println(list.peek()); System.out.println(list); list.pop(); System.out.println(list.pop()); System.out.println(list.pop()); System.out.println(list); list.poll(); System.out.println(list);//[e] list.push("f"); System.out.println(list); list.push("g"); System.out.println(list); list.add("h"); System.out.println(list);

运行结果: 用LinkedList模拟栈数据结构

public class Demo { public static void main(String[] args) { MyList myList = new MyList(); myList.adds("aaa"); myList.adds("bbb"); myList.adds("ccc"); System.out.println(myList); System.out.println(myList.gets()); System.out.println(myList.gets()); System.out.println(myList.gets()); } } class MyList{ LinkedList linkedList=null; public MyList() { linkedList = new LinkedList(); } public void adds(String s ) { linkedList.addFirst(s); } public Object gets() { Object pop=linkedList.pop(); linkedList.addLast(pop); return pop; } @Override public String toString() { return "MyList{" + "linkedList=" + linkedList + '}'; } }

运行结果


最新回复(0)