Java集合框架小总结

总结一下在Java中有着重要地位的一类工具----集合

集合在Java.util包中,能容纳不定数量的元素的容器。

先说他与数组的区别

1,  容器可以容纳数量不确定的元素,我们不用编程实现对窗口容量的控制是最基本的,它所提供的一系列对容器中元素操作的方法更是数组不能完成的。

2,  容器只能容纳对象,但是这点已经不重要了,Java可以对基本类型的元素进行自动打包和解包,我们不用管存在容器中的数到底是包装类型的还是基本类型的。

3,  还有一点就是数组没有对多线程进行处理,而集合容器中既有线程不安全而高效的方法也有线程高效的方法。

4,  对如果对一系列元素都是简单的操作使用数组效率可以会高一点。

Collection

集合主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

下面是在网上找来的Java集合框架的结构图(太懒了就不去画了)


Map

这是Collection的各接口与实现类的继承图

其中的Set和List是Collection的子接口,也是我们平常最最常用的两个接口,Queue是队列数据结构,与Liste很相似,我们可以完全用List实现它的功能。


Map实现类用于保存具有映射关系的数据(key-value)。

看名字就知道这个HashMap与HashSet,TreeMap与TreeSet分别有着什么关系,想想也对把Map里的Value都去掉,只剩下Key就是一个Set了!!据说Java内部就是这么实现的,先实现Map,然后将Map里的Value设为null就可以当Set用了。看看Set内部的结构:

set

嘻嘻,在另一篇里拉过来的图。

拿过来Collection里的方法声明:

methods

关于Collection下实现类的构造方法和add,remove方法见一篇(set小结

遍历Collection的方法


1,使用Iterator接口

Iterator也是集合框架下的重要接口,专门用来进行遍历,中文名称是迭代器。

Iterator中有三个方法:

iterator

这种方法在遍历的过程中只能删除集合中的元素,而不能对集合进行任意的修改。

2,  使用加强的for循环,这种方法只可以对集合读取,不要对正在遍历的集合进行修改。

3,  针对List还可以使用普通的for循环来做,因为List是可以通过索引得到元素的,而且这种方式可以对集合进行任何操作。

下面的代码:

package cn.com.aa.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestCollection {

	public static void main(String[] args) {
		List<Dog> list = new ArrayList<Dog>();
		list.add(new Dog(1));
		list.add(new Dog(2));
		list.add(new Dog(3));
		list.add(new Dog(4));

		// 使用增加的for循环
		for (Dog dog : list) {
			System.out.println(dog);
			// list.remove(1); //出错,不能增不能删
		}

		// 使用Iterator接口
		Iterator<Dog> it = list.iterator();
		while (it.hasNext()) {
			Dog dog = it.next();
			System.out.println(dog);
			if (dog.getWeight() == 2) {
				it.remove();// 这里只能删除,不能增加
			}
		}

		// 使用普通的for循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
			// 这里可以对list进行增减都可以
		}
	}
}

class Dog {
	private int weight;

	public Dog(int weight) {
		super();
		this.weight = weight;
	}

	@Override
	public String toString() {
		return "" + this.weight;
	}

	public int getWeight() {
		return weight;
	}

	public void setWeight(int weight) {
		this.weight = weight;
	}

}

Map里的方法声明:

MapMethod

其中的大部分方法都能看到名字就知道其作用,简单记几个重要的方法。

1,  put方法:将一个键值对放到Map中,要使用泛型。使用put方法会有一个value.class类型的返回值。如果加入的键值对中的键已经存在,则会返回原来的键值对的value,并且将map中的value更新为新的值。

2,  remove方法,将Map中对应Key的键值对删除,同时将键值对的value作为返回值返回。

3,  keySet方法,返回一个包含所有Key的Set,可以用来遍历Map。

4,  entrySet方法,返回一个Set,而Set所能容纳的类型是Map.Entry<K, V>,就是将键和值包装为一个对象了,也用于Map的遍历

上面已经说了几个Map遍历时使用的方法,所以直接看代码;

package cn.com.aa.test;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {

	public static void main(String[] args) {
		Map<String, String> map1 = new HashMap<String, String>();
		System.out.println(map1.put("1", "a"));
		System.out.println(map1);
		System.out.println(map1.put("1", "b"));
		System.out.println(map1);
		
		map1.put("2", "b");
		map1.put("3", "c");
		map1.put("4", "d");
		
		//使用KeySet方法遍历
		Set<String> set1 = map1.keySet();
		for (String str : set1) {
			System.out.println(str + ":" + map1.get(str));
		}
		
		//使用Map.Entry的方法进行遍历
		Set<Map.Entry<String, String>> set2 = map1.entrySet();
		//这里也可以使用Iterator接口来进行遍历
		for (Map.Entry<String, String> entry : set2) {
			System.out.println(entry.getKey() + ":" + entry.getValue()); 
		}
	}

}


一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值