UML是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分。UML主要使用图形符号来表示软件项目的设计,使用UML可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。
有序: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);
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());
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
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 iterator = lst.iterator();
//判断下一个元素是否存在
while(iterator.hasNext()) {
//若存在,移动到下一个元素位置
//易出错
iterator.next();
//删除元素
iterator.remove();
}
System.out.println("删除之后集合大小:"+lst.size());
先移动下标,在删除元素。
概念:初始化大小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集合优化目的在于利用合理的存储空间存下所有元素数据,不多不少,不造成空间浪费。
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);
}
请将上述代码修改成泛型方式。
示例:送快递,寄快递时需要对物品进行包裹,收快递后就需要对包裹进行拆包。
装箱
int a=10;
Integer b=new Integer(a);
装箱:值类型到引用类型
拆箱
Integer c=new Integer(10);
int d=c.intValue();
拆箱:引用类型到值类型
相同点
1、LinkedeList和ArrayList都实现了List接口。
2、ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。
不同点
1、ArrayList底层实现是数组,而LinkedList是双向链表。
2、ArrayList查询快(下标)、增删改慢、LinkedList是查询慢,但是在插入删除时效率比较高。
相同点
1、ArrayList和Vector都是用数组实现的
2、默认初始化大小都是10
不同点
1、Vector多线程是安全的,而ArrayList不是。Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;
2、两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的。(ArrayList每次存储时会检查空间大小,不够时会扩充为原来的1.5倍,Vector会扩充为原来空间的2倍)