Java序谈之List接口、Vector类,LinkedList类

来源:互联网 发布:mysql应用 编辑:程序博客网 时间:2024/06/10 00:44

List接口相对collection的特殊方法

1、添加

关键词:add(index , 元素)

代码示例:

list.add(6,"ning");
分析:注意这里的add中的index不能越界,最多取到list.size()的角标

2、删除

关键词:remove( index)

代码示例:

list.remove(1);
分析:这里的index最多只能取到list.size()-1的角标

3、设置

关键词:set(index , 元素)

代码示例:

list.set(1, "zhoujielun");
分析:这里的index角标最多也只能取到list.size()-1的位置

4、获取

关键词:get (index)

代码示例:

Object object = list.get(2);
分析:注意这里的get()方法的返回值是Object类型的,需要一个Object接收

需求:在集合中存储"a""a""a""b""b""b""c""c""c"  要求去除重复元素

思路:可以设置另一个集合来接收原集合的数据,使用迭代器进行遍历,然后使用contains关键字进行判断

代码分析:

ArrayList arrayList1 = new ArrayList();arrayList1.add("a");arrayList1.add("a");arrayList1.add("a");arrayList1.add("b");arrayList1.add("b");arrayList1.add("b");arrayList1.add("c");arrayList1.add("c");arrayList1.add("c");ArrayList list9 = new ArrayList();Iterator iterator2 = arrayList1.iterator();while(iterator2.hasNext()) {Object next = iterator2.next();if(!list9.contains(next)) {list9.add(next);}}System.out.println(list9);
分析:在遍历的代码中,一定注意不能出现两次next(),否则指针就会向下移动两次,就会少比较数值

拓展需求:如何去除重复对象?

思路:contains方法的核心是equals,并且equals的实质又是地址值之间的比较,在这里不同的对象有不同的地址值,因此使用地址值进行判断没有意义

在这里需要将equals的方法重写,换成我们需要的,并且重写tostring方法

代码分析:

ArrayList arrayList3 = new ArrayList();arrayList3.add(new Man("kobi", "insist"));arrayList3.add(new Man("kobi", "insist"));arrayList3.add(new Man("james", "fight"));arrayList3.add(new Man("james", "fight"));arrayList3.add(new Man("jordan", "exe"));arrayList3.add(new Man("jordan", "exe"));ArrayList arrayList4 = new ArrayList();Iterator iterator3 = arrayList3.iterator();while (iterator3.hasNext()) {Man man = (Man)iterator3.next();if(!arrayList4.contains(man)) {arrayList4.add(man);}}System.out.println(arrayList4);

Vector类的特殊方法

1、向末尾添加元素

关键词:addElement()

代码示例:

vector.addElement("a");
2、

关键词:elements

作用:用于返回集合的枚举,用于使用枚举遍历集合

代码示例:

Vector vector = new Vector();vector.add("wangning");vector.add("wangning");vector.add("wangning");Enumeration elements = vector.elements();while (elements.hasMoreElements()) {System.out.println(elements.nextElement());}

LinkedList类的特殊方法

1、指定添加首尾元素

关键词:addFirst()  addLast()

代码示例:

linkedList.addFirst("d");linkedList.addLast("e");
2、删除首尾元素

关键词:removeFirst() removeLast()

代码示例:

linkedList.removeFirst();linkedList.removeLast();

3、获取首尾元素

关键词:getFirst() getLast()

代码示例:

linkedList.getFirst();linkedList.getLast();
注意:这里的get方法需要一个 object来接收

需求:如果数组中有"b"这个元素,就添加 “Oh-Yes”这个元素

思路:如果使用正常的迭代器的话,在循环中会出现并发编程异常的情况,需要使用LinkedList类的特殊迭代器 listiterator()

代码分析:

LinkedList linkedList = new LinkedList();linkedList.add("wangning");linkedList.add("ning");linkedList.getFirst();linkedList.getLast();ListIterator listIterator2 = linkedList.listIterator();while (listIterator2.hasNext()) {if(listIterator2.next().equals("ning")) {listIterator2.add("wangning");}}System.out.println(linkedList);

ArrayList和LInkedList的区别

分别是通过数组和链表实现

数组和链表的特点和区别

数组:查询块,增删慢

特点:连续的

数组在初始化的时候会默认分配十个空间,一旦不够用以*1.5倍的方式新建数组

查询快:由于元素跟角标一一对应,可以很快得到指定 角标的值

增删慢:增加一个元素,需要将后面的元素整体向后位移一位。删除一个元素,需要将后面所有的元素整体向前位移一位

链表:查询慢,增删快

特点:碎片化的,不连续的,每一个元素保存上一个元素和下一个元素的地址

查询慢:先判断元素角标处于前半部分还是后半部分,然后从头部或者尾部进行查找

增删快:增加一个元素,只需要在指定位置添加元素,元素中保存上一个和下一个元素的地址,上下的元素也保存它的地址

删除一个元素,将元素删除,上下元素各自保存对方的地址

栈结构和队列结构

栈结构:先入后出,

举例:程序中,如果主函数进入栈后立即出栈,main函数中的方法没有意义

队列结构:先入先出

举例:这就相当于按顺序排队,先排队的先运行,自然也就先结束



阅读全文
0 0
原创粉丝点击