Re: L(ist)V(ector)L(inkedList)

集合内容有点多,都多在各种类推的方法上了,就如同数学公式一样,由上式推导出下式,还捎带上其它诱因,发现不一般的算法内容和形参结果。。。转行人工智能算法工程师挺不错的啊。

  • List集合的特有功能概述
    • void add(int index,E element)
    • E remove(int index)
    • E get(int index) 返回列表中指定位置的元素。
    • E set(int index,Eelement)用指定元素替换列表中指定位置的元素

先有List后有天。。。

import java.util.ArrayList;
import java.util.List;

public class Demo1_List {
	
public static void main(String[] args) {
	//demo1();
	//demo2();
	//demo3();
	//demo4();
	demo5();
}

private static void demo5() {
	List list = new ArrayList();
	list.add("a");
	list.add("b");
	list.add("c");
	list.add("d");
	
	list.set(1, "z");						//将指定位置的元素修改
	System.out.println(list);
}

public static void demo4() {
	List list = new ArrayList();
	list.add("a");
	list.add("b");
	list.add("c");
	list.add("d");
	
	//Object obj1 = list.get(2);
	//System.out.println(obj1);
	//通过索引遍历List集合
	for(int i = 0;i < list.size(); i++) {
		System.out.println(list.get(i));
	}
}

public static void demo3() {
	List list = new ArrayList();
	list.add(111);
	list.add(222);
	list.add(333);
	
	list.remove(111);							//删除的时候不会自动装箱,把111当作索引
	System.out.println(list);
}

public static void demo2() {
	List list = new ArrayList();
	list.add("a");
	list.add("b");
	list.add("c");
	list.add("d");
	
	Object obj = list.remove(1);				//通过索引删除元素,将被删除的元素返回
	System.out.println(obj);
	System.out.println(list);
}

public static void demo1() {
	List list = new ArrayList();
	list.add("a");
	list.add("b");
	list.add("c");
	list.add("d");
	list.add(4, "f");						//index<=size并且index>=0都不会报异常
	//list.add(1,"e");
	//list.add(10, "z");					//java.lang.IndexOutOfBoundsException,当存储时使用不存在的索引时
	System.out.println(list);
	}

}

还有size()和get()方法,操作一些数据时会出现ConcurrentModificationException异常,实际解决一下

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Demo2_List {

/**
 ** A:案例演示
 * 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
 */
public static void main(String[] args) {
	List list = new ArrayList();
	list.add("a");									//Object obj = new String();
	list.add("b");
	list.add("world");
	list.add("c");
	list.add("d");
	list.add("e");
	
	/*Iterator it = list.iterator();					//获取迭代器
	while(it.hasNext()) {							//判断集合中是否有元素
		String str = (String)it.next();				//向下转型
		if("world".equals(str)) {
			list.add("javaee");						//遍历的同时在增加元素,并发修改ConcurrentModificationException
		}
	}*/
	
	ListIterator lit = list.listIterator();			//获取迭代器(List集合特有的)
	while(lit.hasNext()) {
		String str = (String)lit.next();			//向下转型
		if("world".equals(str)) {
			//list.add("javaee");						//遍历的同时在增加元素,并发修改ConcurrentModificationException
			lit.add("javaee");//在迭代的过程中如果使用集合的add方法,是会报错的,可以使用迭代器的add方法 
		}
	}
	
	System.out.println(list);
	}

}

ListIterator,了解一下就好。

  • boolean hasNext()是否有下一个
  • boolean hasPrevious()是否有前一个
  • Object next()返回下一个元素
  • Object previous();返回上一个元素

Vector类概述

  • Vector类特有功能
    • public void addElement(E obj)
    • public E elementAt(int index)
    • public Enumeration elements()

v可以说是元老级的人物了,但人老了。。。还是讲一讲历史吧。
Vector的迭代

Vector v = new Vector(); //创建集合对象,List的子类
v.addElement(“a”);
v.addElement(“b”);
v.addElement(“c”);
v.addElement(“d”);
//Vector迭代
Enumeration en = v.elements(); //获取枚举
while(en.hasMoreElements()) { //判断集合中是否有元素
System.out.println(en.nextElement());//获取集合中的元素

  • List的三个子类的特点
    • ArrayList:
      底层数据结构是数组,查询快,增删慢。
      线程不安全,效率高。
      Vector:
      底层数据结构是数组,查询快,增删慢。
      线程安全,效率低。
      Vector相对ArrayList查询慢(线程安全的)
      Vector相对LinkedList增删慢(数组结构)
      LinkedList:
      底层数据结构是链表,查询慢,增删快。
      线程不安全,效率高。

      Vector和ArrayList的区别
      Vector是线程安全的,效率低
      ArrayList是线程不安全的,效率高
      共同点:都是数组实现的
      ArrayList和LinkedList的区别
      ArrayList底层是数组结构,查询和修改快
      LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
      共同点:都是线程不安全的

好了

  • LinkedList类特有功能
    • public void addFirst(E e)及addLast(E e)
    • public E getFirst()及getLast()
    • public E removeFirst()及public E removeLast()
    • public E get(int index);

一个案例结束

import java.util.LinkedList;
public class Demo3_LinkedList {
public static void main(String[] args) {
	LinkedList list = new LinkedList();
		list.addFirst("a");
		list.addFirst("b");
		list.addFirst("c");
		list.addFirst("d");
		list.addLast("e");
		
		//System.out.println(list.getFirst());
		//System.out.println(list.getLast());
		//System.out.println(list.removeFirst());
		//System.out.println(list.removeLast());
		
		System.out.println(list.get(1));
		System.out.println(list);
	}
/*dcbae*/
}

ps:每日一词
御街行·又见雕栏玉砌

红尘粉点雕栏砌,玉杯转、盘节碎。窗中花影淡吹稀,桌上围棋书记。仙山曾看,故江神去,长送人千里。

尊杯酒友歌嬉戏,醉中梦、归无计。灯残光暗剑通明,弹指云间烟避。东风细细,吹来无力,犹道眉滋味。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值