目录:
一、 starUML
什么是starUML?
用于敏捷简洁建模的复杂软件建模器
starUML的使用
类图
用例图
右键选中Add Diagram下面的Use Case 就可以开始制作
二、List集合框架
2.1 list集合特点
了解容器的数据结构(增删改查)
案例1:
package com.wcm.list;
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
// 新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
// 查询
System.out.println(list.get(1));
for (Object obj : list) {
System.out.println(obj);
}
// 修改
list.set(1, "老六");
System.out.println("------------------------------------");
for (Object obj : list) {
System.out.println(obj);
}
// 删除
Object obj2 = list.remove(1);//返回值是删除的元素
list.remove("ww");
System.out.println(obj2);
System.out.println("--------------------------------------");
for (Object obj : list) {
System.out.println(obj);
}
}
注意:做集合元素剔除,不能够在原集合遍历的时候进行操作
会报 currentModifyException 改变异常
2.2 三种遍历方式
package com.wcm.list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo2 {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
//新增
list.add("zs");
list.add("ls");
list.add("ww");
list.add("zl");
//增强for循环
for (Object obj : list) {
System.out.println(obj);
}
System.out.println("==============================");
//for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//迭代器
System.out.println("===========迭代器===========");
Iterator it=list.iterator();
// System.out.println(it.hasNext());
// System.out.println(it.next());
//
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
2.3 LinkedList
通过Linkedlist实现队列以及堆栈的容器
package com.wcm.list;
import java.util.LinkedList;
public class Demo3 {
public static void main(String[] args) {
//队列
// DuiLie duiLie = new DuiLie(new LinkedList<>());
//堆栈
DuizZhan duiLie = new DuizZhan(new LinkedList<>());
duiLie.push("zs");
duiLie.push("ls");
duiLie.push("ww");
duiLie.push("八戒");
System.out.println(duiLie.pop());
System.out.println(duiLie.pop());
System.out.println(duiLie.pop());
System.out.println(duiLie.pop());
}
}
//队列
class DuiLie{
private LinkedList ll;
public DuiLie(LinkedList ll) {
super();
this.ll=ll;
}
// 存
public void push(Object obj) {
ll.add(obj);
}
// 取
public Object pop() {
return ll.remove();
}
}
//堆栈
class DuizZhan{
private LinkedList ll;
public DuizZhan(LinkedList ll) {
super();
this.ll=ll;
}
// 存
public void push(Object obj) {
ll.add(obj);
}
// 取
public Object pop() {
return ll.removeLast();
}
}
2.4 增长因子论证
list集合如何进行优化
当代码中出现了多次add操作,涉及到了list集合容量多次改变,这是十分耗性能的操作,此时通过 设定初始化容量,即可优化性能
list集合长度是可变的,数组长度是不可变的
list集合底层的数据结构是数组
增长因子 0.5 初始容量 10
package com.wcm.list;
import java.lang.reflect.Field;
import java.util.ArrayList;
public class Demo4 {
public static void main(String[] args) throws Exception {
/*String[] arr=new String[10];
arr=new String[11];
arr[11]="zs";
arr=new String[12];
arr[12]="zs";*/
ArrayList<Object> list = new ArrayList<>(100);
for (int i = 0; i < 200; i++) {
list.add(i);
getlen(list);
}
}
private static void getlen(ArrayList<Object> list) throws Exception{
Field f=list.getClass().getDeclaredField("elementData");
f.setAccessible(true);
Object[] elementData=(Object[])f.get(list);
System.out.println("当前集合的元素个数:"+list.size()+"; 当前list集合的容量是:"+elementData.length);
}
}
2.5 集合框架ArrayList去重及其底层原理
去重引用对象时,底层调用的是对象的equals方法
package com.wcm.list;
import java.util.ArrayList;
public class Demo5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
// 新增
list.add(new Person("aa",18));
list.add(new Person("bb",29));
list.add(new Person("cc",41));
list.add(new Person("ss",18));
list.add(new Person("老六",18));
list.add(new Person("cc",41));
System.out.println(list);//6个
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);//5个
}
}
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public boolean equals(Object obj) {
System.out.println("=============equals被调用===========");
return super.equals(obj);
}*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}