集合类、泛型、枚举
1.集合类:
使用集合框架的原因:
有些数据用数组存储不方便,因为数组的长度是固定的。我们需要其他的存储结构来存放长度可变的数据(如对象),所以java.util包中提供了一些集合类(容器)。
Coleection: list:用来装有序的东西(带格子的抽屉)
—— > ArrayList:底层是用数组实现
—— > LinkList:底层是用链表实现
set:用来装无序的东西(箱子,不能重复)
—— > HashSet:可以为空,由HashMap实现所以迭代顺序不确定
—— > TreeSet:按照自然顺序递增排序(对象必须实现comparator接口),也可以按照指定比较器递增排序(重写compare方法)
Map:用来装一对一的东西:(字典)
—— > HashMap:允许null键,但必须唯一。遍历时无序,若要有序可以将他在放入treeMap中。或用HashMap的子类LinkedHashMap(按数据放入顺序输出)
—— > TreeMap:不允许null键。遍历时有序(一般是键对象升序),但添加、删除和定位映射关系时性能差于HashMap
另外,介绍个工具类,java.util.Collections。注意,这不是Collection接口。Collections很像 Arrays类。Arrays提供了一系列用于对数组操作的静态方法,查找排序等等。Collections也提供了一系列这样的方法,只是它是用于处理 集合的,虽然Collections类和Collection接口很像,但是不要被Collections的名字给欺骗了,它不是只能处理 Collection接口以及子接口的实现类,同样也可以处理Map接口的实现类。
集合的遍历(以HashMap举例):
//HashMap的三种迭代输出 1. HashMap<Integer,ProductInfo> maps = (HashMap)session.getAttribute("shopcar"); for(Map.Entry<Integer,ProductInfo> map : maps.entrySet()){ ProductInfo info = map.getValue(); } 2. Iterator<Interger> iterator = maps.keySet().iterator() while(iterator.hasNext()){ Interger key = iterator.next(); String value = maps.get(key); System.out.println(key); } 3.for(Iterator<Interger> iter = maps.keySet().iterator();iter.hasNext();){ Integer key = iter.next(): String value = maps.get(key); System.out.println(key); }
2.枚举:
我们可以将枚举类型看作是一个类(它实际编译时也会生成一个class类)。它继承于java.lang.Enum类,当我们定义一个枚举类型时,可以看作是一个枚举类的实例,而且默认被public static final修饰。所以可以直接通过枚举名来使用枚举中的属、方法以及java.lang.Enum中的方法(values()、valueOf()、ordinal()等);我们也可以将枚举类看作是类似于int,char的一种数据类型,但你只能给它赋予enum里面规定的值;我们还可以将枚举看作是用来存储数据的数组或集合,但它只用来存放数据值固定,而且个数确定的数据。
枚举的优点:枚举它类型安全,运行效率高,紧凑有效的数据定义,可以和程序其他部分完美交互
枚举的使用:当我们知道数据集中数据的所有个数(如一年有春、夏、秋、冬,人有男人、女人,并且想为这些数据赋予属性和方法时我们就可以使用枚举)。枚举既可以定义在类外也可以定义在类里面(在类里面时类似于内部类)。
interface Constants { // 将常量放置在接口中 public static final int Constants_one= 1; public static final int Constants_two = 2; } interface d { public String getDescription(); public int getI(); } enum Constants1 { // 将常量放置类内的枚举类型中,类似与内部类,当然也可以在类外部定义一个枚举存放 Constants_one, Constants_two } enum Constants2{ // 将常量放置在枚举类型中 Constants_A("我是枚举成员A"), // 定义带参数的枚举类型成员 Constants_B("我是枚举成员B"), Constants_C(3), Constants_D(4); private String description; private int i = 4; private Constants2() { } // 定义参数为String型的构造方法 private Constants2(String description) { this.description = description; } private Constants2(int i) { // 定义参数为整型的构造方法 this.i = this.i + i; } public String getDescription() { // 获取description的值 return description; } public int getI() { // 获取i的值 return i; } } enum AnyEnum implements d { //实现接口的枚举 A { // 可以在枚举类型成员内部设置方法 public String getDescription() { return ("我是枚举成员A"); } public int getI() { return i; } }, B { public String getDescription() { return ("我是枚举成员B"); } public int getI() { return i; } }, C { public String getDescription() { return ("我是枚举成员C"); } public int getI() { return i; } }, D { public String getDescription() { return ("我是枚举成员D"); } public int getI() { return i; } }; private static int i = 5; } public class Test { // 使用接口定义常量 public static void doit(int c) { // 定义一个方法,这里的参数为int型 switch (c) { // 根据常量的值做不同操作 case Constants.Constants_one: System.out.println("doit() Constants_one"); break; case Constants.Constants_two: System.out.println("doit() Constants_two"); break; } } // 定义一个方法,这里的参数为枚举类型对象 public static void doit2(Constants1 c) { switch (c) { // 根据枚举类型对象做不同操作,与doit()对比好处是doit2()只接受我们定义的数据,否则编译会报错 case Constants_one: System.out.println("doit2() Constants_one"); break; case Constants_two: System.out.println("doit2() Constants_two"); break; } } public static void main(String[] args) { //测试省略 } }
3.泛型:
我们要进行强制类型转换的时候一般都会用instanceof来判断父类对象是不是子类的一个实例,从而判断是否可以强制转换,避免运行时异常(ClassCastExcoption)。但很多时候会不经意间进行强制转换,而使用泛型就可一避免发生ClassCastException,如果不能强制转换它会在编译时就报错。
相关推荐
使用泛型集合维护有继承关系的电影票对象 座位数可以在系统中指定 点击座位可购买不同类型的电影票 使用简单工厂模式创建不同类型的电影票 使用多态实现不同类型电影票的价格计算 使用接口实现电影票的打印 使用序列...
ava基础 基础知识 面向对象基础 Java基本数据类型 string和包装类 final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 ...Java集合详解8:Java集合类细节精讲 JavaWeb
Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器 Java集合详解:HashMap和HashTable Java集合详解...
Java.IO Java.lang Java.math Java.net等思维导图,帮助你快速入门java核心技术卷I 注意:不包括多线程并发,网络编程复杂知识点!!!!!
修饰符,内部类,集合,反射,泛型,枚举
Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 ...第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程
Java 基础核心总结 包括java概述、开发环境配置、基本语法、执行控制流程、面向对象、 访问控制权限、接口和抽象类、异常、内部类、集合、泛型、反射、枚举 I/O等。
1. C#程序特点 2. 枚举型与结构型的区别 3. 数据类型转换 4. break与continue 5. 访问修饰符 6. 类与对象 7....8. 属性访问器 (什么是属性访问器?) ppt19.... 集合与泛型集合的区别 20. 事件驱动模型
提供给 初学者学习 继承实体类类 和枚举 泛型集合的一些应用
1. C#语言特点 2. C#程序特点 ...19. 集合与泛型集合的区别 20.试述完整的事件处理系统的组成要素? 21.事件驱动模型 22. C#函数中无参数修饰符、out修饰符、params修饰符、ref修饰符的区别?
5. Collection集合、数据结构、List集合、泛型、Set集合、可变参数 6. 集合工具类Collections、Map集合、集合嵌套、不可变集合 7. Stream流、异常处理 8. Logback日志框架、阶段项目 9. File、方法递归、字符集、IO...
Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 ...第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程
本阶段复习了异常。学习了常用类和枚举类型,并实现了泛型和集合类。包装类,Math类,Random类,Date类,List集合,Sewt集合,Map集合等知识
具体内容包括:类和泛型,集合、枚举器和迭代器,数据类型,语言集成查询和lambda表达式,调试和异常处理,反射和动态编程,正则表达式,文件系统I/O,网络和Web,XML,安全,线程、同步和并发,工具箱。本书使用...
用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream ...
枚举类 对象表达式(Object Expression)与对象声明(Object Declaration) 委托(Delegation) 委托属性(Delegated Property) 函数与 Lambda 表达式 函数 高阶函数与 Lambda 表达式 内联函数(Inline Function) 其他 解构...
枚举类 对象 2 1.5.12 1.5.13 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.7.10 1.7.11 1.7.12 1.7.13 1.7.14 1.8 1.8.1 1.8.2 1.9 1.9.1 1.9.2 1.9.2.1 1.9.3 1.10 ...
数组的概念 数组的申明和使用 Array类 ArrayList 泛型的使用 泛型的特征 泛型类、接口、方法的编写和使用 集合接口 枚举
我今年 九月份 过scjp 考试 时 用的题库 是英文原版的 1-JAVA 基础 2-类、接口以及枚举 3-面向对象编程 4-异常和断言 5-I/O 流 6-字符串、格式化以及封装类 7-集合和泛型 8-线程
Java核心基础知识总结,含思维导图,包含Java基本语法,面向对象,接口和抽象类,异常,内部类,集合,泛型,反射,枚举,I/O,注解等Java基础核心知识,总结全面,内容丰富,欢迎下载。 如果对你有用,麻烦点个收藏...