集合框架之list

一、 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;
	}
	
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值