集合框架类图
UML:统一建模语言 类框图
类图
时序图
组件图
部署图
制作方式:
第一种:工具:PowerDesigner
第二种:在线网站:www.processon.com
1. Collection接口
1.1 集合框架的顶级接口
1.2 是Set和List的父接口
1.3 但不是Map的父接口
继承、依赖的特点
2. List接口
2.1 特点:有序、对象可以重复
2.2 遍历方式
2.2.1 下标
2.2.2 foreach(>=jdk1.5)
2.2.3 迭代器Iterator
迭代器是一种对象,能够用来遍历目标中的部分或者全部元素。
代码演示
public static void main(String[] args) {
List myl=new ArrayList<>();
/**
* list集合特点
* 1,有序
* 2,允许重复
*/
myl.add("ab");
myl.add(1);
myl.add(true);
myl.add('c');
myl.add(3.4);
// System.out.println("length:"+myl.size());
// 输出显示集合中第三个值
// System.out.println(myl.get(2));
// String [] s=new String[10];
// 循环取值方法一
System.out.println("-------foreach--------");
for (Object o: myl) {
System.out.println(o);
}
// 循环取值方法二
System.out.println("-------for循环-------");
for(int i=0;i<myl.size();i++) {
System.out.println(myl.get(i));
}
// 循环取值方法三。选代器(官方推荐使用)
System.out.println("-------选代器--------");
Iterator myi=myl.iterator();
while (myi.hasNext()) {
Object next = myi.next();
System.out.println(next);
}
}
}
2.3 List优化
初始容量10,负载因子10*1.5
1.List list=new ArrayList();//实例化时 list的长度为0
2.首次扩容长度为10
3.当空间不足的时候以0.5进行扩展 10*(1+0.5)=15
4.当list长度浪费了资源怎么办?(解决办法)固定集合长度空间:List list=new ArrayList(50);
刚刚创建的集合是没有长度的,但是只要往里面插入一个值,那么这个集合的长度就会变为10,如果后续长度超过10,在插入第11个值的时候,集合长度需要再次改变按照负载因子来改变(0.5)10*0.5+10 15*0.5+15
指定初始容量
3. Set
3.1 特点:无序、对象不能重复(eqauls)
eqauls从Object继承,默认比较的地址
3.2 遍历
3.2.1 foreach
3.2.2 迭代器
3.3 常用实现类
HashSet
TreeSet:根据某种(规则)对里面的元素进行排序
规则1: java.lang.Comparable
规则2: java.util.Comparator
4. Map
4.1 特点:无序、以键值对的形式添加元素,键不能重复,值可以重复
它没有继承Collection接口
4.2 遍历
4.2.1 先取出保存所有键的Set,再遍历Set即可(2种)
public static void main(String[] args) {
Map<String, Object> map=new HashMap<>();
map.put("a", "哈哈");
map.put("b", "星星");
map.put("c", "呵呵");
Set<Entry<String, Object>> mys = map.entrySet();
for (Entry<String, Object> entry : mys) {
String key = entry.getKey();
Object value = entry.getValue();
System.out.println(key+","+value);
}
}
4.2.2 先取出保存所有Entry的Set,再遍历此Set即可
public static void main(String[] args) {
Map<String, Object> map=new HashMap<>();
map.put("a", "哈哈");
map.put("b", "星星");
map.put("c", "呵呵");
map迭代器,官方推荐的循环遍历取值方式
Iterator<Entry<String, Object>> myi = mys.iterator();
while (myi.hasNext()) {
Entry<String, Object> next = myi.next();
System.out.println(next.getKey()+","+next.getValue());
}
}
5. 其它
5.1 Iterator(迭代器):遍历集合List/Set
hasNext
next
remove:在遍历集合,并同时需要删除集合中的元素时,建议使用
Iterator.remove
5.2 java.lang.Comparable:自然排序接口
5.3 java.util.Comparator:比较器接口
5.4 Collections:工具类,提供一组静态方法操作Collection集合
Arrays:工具类,提供了一组静态方法操作数组
6. 泛型
以类型作为参数的类就叫泛型
作用:提高程序健壮性,简化代码
泛型的默认值是Object
语法:类名例如:Demo5(相当于一个方法的语法)调用:Demo5(注意数据类型只能用引用数据类型)
7. 装箱、拆箱
值类型->引用类型 装箱
引用类型->值类型 拆箱
jdk1.5之后引入了自动装箱及自动拆箱功能
ArrayList、LinkedList、Vector区别
ArrayList:以连续的数组结构存储数据,查询块(下标)、增删改慢
LinkedList:以链表的结构存储数据,查询慢、增删改快
Vector:增删改查都慢,已过时
案例:
使用LinkedList完成一个堆栈
MyStack::
堆栈:表示一个先进后出的数据结构,子弹夹
压:push
弹:pop
public class MyStack {
// 堆栈:表示一个先进后出的数据结构,子弹夹
// 压:push
// 弹:pop
private static LinkedList link=new LinkedList();
//压
public void push(Object o) {
link.addFirst(o);//增加第一个
}
//弹
public Object pop() {
Object ob=link.getFirst();//得到第一个
link.removeFirst();//移出/删除第一个
return ob;
}
public static void main(String[] args) {
MyStack m=new MyStack();
//增加
m.push("a");
m.push("b");
m.push("c");
m.push("d");
m.push("e");
//取出来
for (Object o : link) {
System.out.println(o);
}
}
}
HashSet和Hashtable的区别
1.前者是Set,后者是Map
2.前者允许null元素,后者不允许
3.前者非同步,后者是同步的
4.前者用来保存(key,value)的数据结构,后者是用来保存不重复的数据(类似于不重复的数组)