目录
在正式进入了解list之前,我们认识一下什么是类图:能够标记类与类或者类与接口之间关系的图
例如图下:
什么是用例图:能够直观的表现系统中的功能并且哪些角色可以看到哪些功能
例如图下:
一、starUML的使用
首先安装图下工具:解压即可用
安装成功后:
创建一个用例图:点击Model,出现如图下
选择UseCaseDiagram
在左侧选中Use Case拖出来出现如上图效果
二级菜单管理:在左侧选中Use Case Subject拖出来出现如下图效果
右键红色部分画出小人
点击该先部分画出线
注意:连不了二级菜单(学委连不上学生博客统计)改线只能连一级菜单
Dependency可连二级菜单
导出图片
二、list集合的增删改查
首先在eclipse建一个叫collection的项目
在Java Resource下的src中建一个包com.chendongli.list
案例代码:
/**
* 对list集合容器的增删改查
* @author zjjt
*
*/
public class Demo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("aa");
list.add("bb");
list.add("bb");
list.add("dd");
//查询
System.out.println(list.get(1));//bb
for (Object object : list) {
System.out.println(object);
}
//修改
list.set(1, "老六");
System.out.println("修改后===========================");
for (Object object : list) {
System.out.println(object);
}
//删除
Object obj = list.remove(1);//返回值是删除的元素
System.out.println(obj+"aaa");
System.out.println("删除后===========================");
for (Object object : list) {
System.out.println(object);
}
}
}
运行效果图
试题:
类似情况:调用第三方接口 针对于一些数据过滤
public class Test1 {
public static void main(String[] args) {
// 1,4,6,9,11,8 剔除集合中的奇数
ArrayList<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("4");
list1.add("6");
list1.add("9");
list1.add("11");
list1.add("8");
for (String obj : list1) {
if(Integer.valueOf(obj) % 2 ==1) {
list1.remove(obj);
}
}
}
效果图:
结论和问题原因:在做元素剔除时,不能在原集合上进行操作;以该题为例共六个元素,删除一个之后,无法正确判断是遍历六个还是五个
解决办法:再加一个集合,将元素放入
代码:
public class Test1 {
public static void main(String[] args) {
// 1,4,6,9,11,8 剔除集合中的奇数
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
list1.add("1");
list1.add("4");
list1.add("6");
list1.add("9");
list1.add("11");
list1.add("8");
list2.add("1");
list2.add("4");
list2.add("6");
list2.add("9");
list2.add("11");
list2.add("8");
for (String obj : list1) {
if(Integer.valueOf(obj) % 2 ==1) {
list2.remove(obj);
}
}
System.out.println(list2);
}
效果图:
三.list集合遍历的三种形式
①、for循坏
②、for循坏的增强
③、迭代器
代码展示:
public class Demo2 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("bb");
list.add("dd");
//增加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.next());//输出结果为aa
// System.out.println(it.hasNext());//输出结果为true
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
效果图:
四.Linkedlist实现堆栈以及队列
堆栈的特点:新进后出
队列的特点:先进先出
队列的代码展示:
/**
* 通过Linkedlist实现队列以及堆栈的容器
* @author zjjt
*
*/
public class Demo3 {
public static void main(String[] args) {
Duilie duilie = new Duilie(new LinkedList<>());
duilie.push("aa");
duilie.push("bb");
duilie.push("cc");
duilie.push("dd");
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) {
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.remove();
}
}
效果图:
堆栈的代码展示:
public class Demo3 {
public static void main(String[] args) {
Duizhan duilie = new Duizhan(new LinkedList<>());
duilie.push("aa");
duilie.push("bb");
duilie.push("cc");
duilie.push("dd");
System.out.println(duilie.pop());
System.out.println(duilie.pop());
System.out.println(duilie.pop());
System.out.println(duilie.pop());
}
}
class Duizhan{
private LinkedList ll;
public Duizhan(LinkedList ll) {
this.ll = ll;
}
//存
public void push(Object obj) {
ll.add(obj);
}
//取
public Object pop() {
return ll.removeLast();
}
}
效果图:
五.list集合优化以及增长因子
代码展示:
package com.chendongli.list;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* list集合如何进行优化
* 当代码中出现了多次add操作,涉及到了list集合容量多次改变,这是十分耗性能的操作,此时通过
* 设定初始化容量,即可优化性能
*
*
* list集合长度是可变的,数组长度是不可变的;
* 结论1:list集合底层的数据结构是数组
* 结论2:增长因子 0.5,初始容量 10
* @author Administrator
*
*/
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);
}
}
效果图:
代码展示:
package com.chendongli.list;
import java.util.ArrayList;
/**
* list集合去重底层原理
* @author zjjt
*
*/
public class Demo5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("aa");
list.add("bb");
list.add("bb");
list.add("dd");
list.add("aa");
System.out.println(list);
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);
}
}
效果图:
当集合添加为对象时
代码展示:
/**
* list集合去重底层原理
* @author zjjt
*
*/
public class Demo5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add(new Person("aa", 18));
list.add(new Person("bb", 19));
list.add(new Person("cc", 20));
list.add(new Person("dd", 21));
list.add(new Person("ee", 22));
list.add(new Person("aa", 18));
System.out.println(list);
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);
}
public static void main2(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("aa");
list.add("bb");
list.add("bb");
list.add("dd");
list.add("aa");
System.out.println(list);
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);
}
}
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;
}
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
效果图:
注意:去重失败
正确代码:重写equals方法
结论:去重引用对象时,底层调用的是对象的equals方法
public class Demo5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add(new Person("aa", 18));
list.add(new Person("bb", 19));
list.add(new Person("cc", 20));
list.add(new Person("dd", 21));
list.add(new Person("ee", 22));
list.add(new Person("aa", 18));
System.out.println(list);
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);
}
public static void main2(String[] args) {
ArrayList list = new ArrayList<>();
//新增
list.add("aa");
list.add("bb");
list.add("bb");
list.add("dd");
list.add("aa");
System.out.println(list);
ArrayList listnew = new ArrayList<>();
for (Object object : list) {
if(!listnew.contains(object)) {
listnew.add(object);
}
}
System.out.println(listnew);
}
}
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;
}
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@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;
}
}
效果图: