本文出自:http://blog.csdn.net/dt235201314/article/details/70210256
雏鹰飞翔计划三四周(07/04/18)内容:集合 枚举 泛型
结合Android开发经验先说说印象
集合:常见用途,装数据,装对象。后台json数据常嵌套list,map;
枚举:在时间控件见过,限制参数(year month day);
泛型:在Android网络框架封装callback
(回头看,在边工作边学习的情况下2周搞定集合是不可能的,只能大概了解集合框架,大概数据结构和常见的一些API)
新增源码阅读:https://github.com/JinBoy23520/JavaSource(持续更新)
在Java中的数据结构主要包括以下几种接口和类:
枚举(Enumeration):虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。
例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。
请参见枚举(Enumeration)
位集合(BitSet):实现了一组可以单独设置和清除的位或标志。请参见位集合(BitSet)
向量(Vector):和传统数组非常相似,但是Vector的大小能根据需要动态的变化。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。
请参见向量(Vector)
栈(Stack):实现了一个后进先出(LIFO)的数据结构。请参见栈(Stack)
字典(Dictionary):是一个抽象类,它定义了键映射到值的数据结构。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
请参见字典( Dictionary)
哈希表(Hashtable):提供了一种在用户定义键结构的基础上来组织数据的手段。请参见哈希表(HashTable)
属性(Properties):继承于 Hashtable.Properties 类表示了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。请参见属性(Properties)
集合框架体系如图所示(入门版)
简版
入门到放弃版
1.集合框架的出现为提供了预先包装的数据结构和算法,更方便使用
2.接口及相关类容参考菜鸟教程:Java 集合框架http://www.runoob.com/java/java-collections.html
Tree型功能对比图:
/** **/ public class ArrayListDemo { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //创建一个EmpManage对象 EmpManage em = new EmpManage(); //做出一个简单的菜单 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("请选择一个操作:"); System.out.println("1:表示添加一个雇员"); System.out.println("2:雇员查找一个:"); System.out.println("3:修改一个雇员"); System.out.println("4:删除一个雇员"); System.out.println("5:退出"); String operType = br.readLine(); if (operType.equals("1")) { System.out.println("请输入编号"); String empNo = br.readLine(); System.out.println("请输入名字"); String name = br.readLine(); System.out.println("请输入工资"); float sal = Float.parseFloat(br.readLine()); Emp emp = new Emp(empNo, name, sal); em.addEmp(emp); } else if (operType.equals("2")) { System.out.println("请输入编号"); String empNo = br.readLine(); em.showInfo(empNo); } else if (operType.equals("3")) { System.out.println("请输入编号"); String empNo = br.readLine(); System.out.println("请输入修改后工资"); float sal = Float.parseFloat(br.readLine()); em.updateSal(empNo, sal); } else if (operType.equals("4")) { System.out.println("请输入编号"); String empNo = br.readLine(); em.delEmp(empNo); } else if (operType.equals("5")) { //退出 System.exit(0); } } } }Emp.Java* author : JinBiao * CSDN : http://my.csdn.net/DT235201314 * time : 2017/04/16 * desc :实现雇员管理添加·删除·修改功能 * version: 1.0 *
/** **/ public class Emp { //学号 private String empNo; private String name; private float sal; //构造函数 public Emp(String empNo, String name, float sal) { this.empNo = empNo; this.name = name; this.sal = sal; } public String getEmpNo() { return empNo; } public void setEmpNo(String empNo) { this.empNo = empNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSal() { return sal; } public void setSal(float sal) { this.sal = sal; } } EmpManage.Java* author : JinBiao * CSDN : http://my.csdn.net/DT235201314 * time : 2017/04/16 * desc :雇员类 * version: 1.0 *
/** **/ public class EmpManage { private ArrayList al = null; public EmpManage() { al = new ArrayList(); } //加入员工 public void addEmp(Emp emp) { al.add(emp); } //显示员工的相关信息 public void showInfo(String empNo) { //遍历整个ArrayList() for (int i = 0; i < al.size(); i++) { //去除Emp对象 Emp emp = (Emp) al.get(i); //比较编号 if (emp.getEmpNo().equals(empNo)) { System.out.println("找到员工,他的信息是:"); System.out.println("编号是" + empNo); System.out.println("名字是" + emp.getName()); System.out.println("工资是" + emp.getSal()); } else { System.out.println("没有该员工"); } } } //修改工资 public void updateSal(String empNo, float newSal) { for (int i = 0; i < al.size(); i++) { Emp emp = (Emp) al.get(i); if (emp.getEmpNo().equals(empNo)) { emp.setSal(newSal); } } } public void delEmp(String empNo) { for (int i = 0; i < al.size(); i++) { Emp emp = (Emp) al.get(i); if (emp.getEmpNo().equals(empNo)) { al.remove(i); } } } }* author : JinBiao * CSDN : http://my.csdn.net/DT235201314 * time : 2017/04/16 * desc :雇员管理员类 * version: 1.0 *
运行结果:
上述根据操作显示
LinkedLisDemo.Java
/** **/ public class LinkedListDemo { private static void pringLinkedList(LinkedList* author : JinBiao * CSDN : http://my.csdn.net/DT235201314 * time : 2017/04/18 * desc : LinkedList演示 * 总结 : * 1.LinkedList方法上比ArrayList多了对头部尾部的索引添加删除方法(LinkedList基于链表的数据结构) * 2.Java中ArrayList和LinkedList区别:http://pengcqu.iteye.com/blog/502676 * 3.空间复杂度:ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间, * 而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间 * 4.时间复杂度:LinkedList不支持高效的随机元素访问 * version: 1.0 *
Java中ArrayList和LinkedList区别(时间空间复杂度分析):http://pengcqu.iteye.com/blog/502676
MapDemo.Java
/** **/ public class MapDemo { public static void main(String[] args) { // TODO Auto-generated method stub //LinkList // LinkedList ll=new LinkedList(); // Emp emp1=new Emp("sa01","aa", 1.2f); // Emp emp2=new Emp("sa01","bb", 1.2f); // //表示把emp1加在链表的最前面 // ll.addLast(emp1); // ll.addFirst(emp2); // for(int i=0; i* author : JinBiao * CSDN : http://my.csdn.net/DT235201314 * time : 2017/04/16 * desc : map演示 * 总结 : * 1.HashMap 是一个散列表,是存放一对值的最大接口,即接口中的每一个元素都是一对,以key->value键值对的形式保存 * 2.四种遍历 * 3.TreeMap 延伸阅读 http://blog.csdn.net/chenssy/article/details/26668941 * version: 1.0 *
SetDemo.Java
/** **/ public class SetDemo { public static void main(String[] args) { /** * 1,HashSet是无序 * 2,不循序有重复的值 */ HashSet* author : JinBiao * CSDN : http://my.csdn.net/DT235201314 * time : 2017/04/18 * desc :Set演示 运用较少 * version: 1.0 *
40个常见java集合面试题:http://www.importnew.com/15980.html
Java中的集合类解析和一些有深入的面试题:http://blog.csdn.net/he90227/article/details/38061087
如果文章对你有帮助,欢迎点赞支持
代码下载:https://github.com/JinBoy23520/CoderToDeveloperByTCLer
不懂得地方,微信扫二维码提问