java集合框架

集合框架类图

 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)的数据结构,后者是用来保存不重复的数据(类似于不重复的数组)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值