集合框架之List

1.什么是UML

UML是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分。UML主要使用图形符号来表示软件项目的设计,使用UML可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。

2.集合框架

3.List集合

3.1.特点

  • 有序:List集合数据存进去的顺序和取出来的顺序一致

List lst=new ArrayList();
lst.add(2);
lst.add(1);
lst.add(5);
lst.add(8);
System.out.println(lst);
  • 不唯一:List集合数据允许添加重复数据

List lst=new ArrayList();
lst.add(2);
lst.add(1);
lst.add(5);
lst.add(8);
lst.add(8);
System.out.println(lst);

3.2.遍历方式

  • for下标

List lst=new ArrayList();
lst.add("zs");
lst.add("ls");
lst.add("ww");
for (int i = 0; i < lst.size(); i++) {
    System.out.println(lst.get(i));
}
  • foreach

List lst=new ArrayList();
lst.add("zs");
lst.add("ls");
lst.add("ww");
for (String str : lst) {
    System.out.println(str);
}
  • 迭代器

List lst=new ArrayList();
lst.add("zs");
lst.add("ls");
lst.add("ww");
Iterator iterator = lst.iterator();
while(iterator.hasNext())
    System.out.println(iterator.next());

3.3.删除

  • for正向删除

List lst=new ArrayList<>();
lst.add(12);
lst.add(13);
lst.add(14);
lst.forEach(System.out::println);
System.out.println("删除之前集合大小:"+lst.size());
int size = lst.size();
for (int i = 0; i <size; i++) {
    lst.remove(0);
}
System.out.println("删除之后集合大小:"+lst.size());
  • for逆向删除

List lst=new ArrayList<>();
lst.add(12);
lst.add(13);
lst.add(14);
lst.forEach(System.out::println);
System.out.println("删除之前集合大小:"+lst.size());
int size = lst.size()-1;
for (int i = size; i >=0; i--) {
    lst.remove(i);
}
System.out.println("删除之后集合大小:"+lst.size());
  • 迭代器删除

List集合删除推荐使用迭代器。

List lst=new ArrayList<>();
lst.add(12);
lst.add(13);
lst.add(14);
lst.forEach(System.out::println);
System.out.println("删除之前集合大小:"+lst.size());
Iterator<String> iterator = lst.iterator();
//判断下一个元素是否存在
while(iterator.hasNext()) {
    //若存在,移动到下一个元素位置
    //易出错
    iterator.next();
    //删除元素
    iterator.remove();
}
System.out.println("删除之后集合大小:"+lst.size());

先移动下标,在删除元素。

3.4.优化

概念:初始化大小10、负载因子1.5、向下取整 公式:容器大小*1.5倍 例如:10*1.5=15、15*1.5=22、22*1.5=33 ...

public static void main(String[] args) {
    List lst=new ArrayList<>();
    for (int i = 0; i < 50; i++) {
        lst.add(i);
        System.out.println(i);
        getLen(lst);
    }
}

public static void getLen(List lst){
    try {
        Class<? extends List> lstClass = lst.getClass();
        Field field = lstClass.getDeclaredField("elementData");
        field.setAccessible(true);
        Object[] obj = (Object[]) field.get(lst);
        System.out.println("集合的大小是:"+obj.length);
    } catch (Exception e) {
    	e.printStackTrace();
    }
}

List集合优化目的在于利用合理的存储空间存下所有元素数据,不多不少,不造成空间浪费。

4.迭代器原理

5.泛型

JDK1.5以上才有。 1)以类型为参数的类叫做泛型 2)泛型的默认类型为Object 3)作用:提高程序的健壮性、简化代码

案例:获取List集合中的奇数

List lst=new ArrayList();
lst.add(2);
lst.add(5);
lst.add(8);
lst.add(13);
Iterator it=lst.iterator();
while(it.hasNext()){
	Object obj=it.next();
	int num=Integer.parseInt(obj.toString());
	if(num%2!=0)
		 System.out.println(num);
}

请将上述代码修改成泛型方式。

6.装拆箱

示例:送快递,寄快递时需要对物品进行包裹,收快递后就需要对包裹进行拆包。

  • 装箱

int a=10;
Integer b=new Integer(a);

装箱:值类型到引用类型

  • 拆箱

Integer c=new Integer(10);
int d=c.intValue();

拆箱:引用类型到值类型

7.ArrayList、LinkedList和Vector的区别

7.1.ArrayList和LinkedList的区别

  • 相同点

1、LinkedeList和ArrayList都实现了List接口。

2、ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。

  • 不同点

1、ArrayList底层实现是数组,而LinkedList是双向链表。

2、ArrayList查询快(下标)、增删改慢、LinkedList是查询慢,但是在插入删除时效率比较高。

7.2.ArrayList和Vector的区别

  • 相同点

1、ArrayList和Vector都是用数组实现的

2、默认初始化大小都是10

  • 不同点

1、Vector多线程是安全的,而ArrayList不是。Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;

2、两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的。(ArrayList每次存储时会检查空间大小,不够时会扩充为原来的1.5倍,Vector会扩充为原来空间的2倍)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值