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

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函数中的方法没有意义

队列结构:先入先出

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值