集合类、泛型、枚举
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,如果不能强制转换它会在编译时就报错。
相关推荐
集合、泛型和枚举都是Java开发中常见的概念,它们在处理数据和编写代码时起到关键作用。 首先,Java集合是用于存储一组对象的容器。在Java中,集合分为两大类:`Collection`和`Map`。`Collection`接口是所有单一值...
泛型类型可以应用于各种场景,例如集合类、泛型类、泛型接口等。泛型类型可以使代码更加灵活和通用。 例如: ```java public class Container<T> { private T value; public void setValue(T value) { this....
我们可以创建一个泛型类,该类包含一个颜色枚举的集合: ```csharp public class EnumCollection<T> where T : struct, Enum { private List<T> colors = new List(); public void Add(T value) { colors.Add...
泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的枚举类型。 首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、...
枚举(Enum)和泛型(Generic)是Java编程语言中的两种强大特性,它们极大地提升了代码的可读性、安全性和复用性。本篇文章将深入探讨这两种概念及其在实际应用中的示例。 首先,我们来看枚举。枚举是一种预定义的...
泛型可以应用于集合框架、自定义类、接口和方法等场景,是Java编程中的高级特性。本部分内容将详细介绍泛型的基本概念、定义、用法和规则限制等。 首先,泛型的基本概念是“参数化类型”,它允许程序员在不明确指定...
例如,Java的ArrayList、HashMap等集合类就是泛型的应用实例,它们允许开发者在创建集合时指定存储的对象类型,确保在操作集合时不会插入不兼容的类型。 泛型的基本语法是使用尖括号来声明类型参数。例如,一个简单...
枚举是Java中用于创建固定数量的常量集合的类型,常用于表示一组预定义的值。枚举的使用使得代码更加清晰,也更易于维护和理解。 1. **枚举定义**:在Java中,我们可以通过`enum`关键字定义枚举,如`enum Season {...
例如,`IEnumerable<T>` 接口表示可枚举的集合,其中 T 代表集合中的元素类型。 ```csharp public interface IMyGenericInterface { void ProcessItem(T item); } public class MyClass : IMyGenericInterface { ...
例如,可以创建一个泛型枚举类,其中的每个枚举常量代表一个具体的类型。这样,可以根据枚举值来确定应该使用的泛型类型。 6. **集合的泛型操作**: 在Java中,集合框架的泛型操作包括添加、删除、查找和遍历元素...
泛型在Java集合框架中的应用尤其广泛,如List、Set和Map。使用泛型,我们可以确保集合内的元素类型一致,避免了类型转换错误。例如,当我们创建一个`List<String>`,集合只能存储字符串类型的元素,防止了将其他类型...
例如,我们可以创建一个泛型方法,接受一个包含待去重数据的集合作为输入,利用枚举遍历这个集合,并将每个元素添加到一个HashSet中,HashSet在插入时会自动检查并排除重复项。由于HashSet的查找和插入操作具有O(1)...
"泛型封装.rar"这个压缩包文件很可能包含了一个示例,展示了如何在C#中有效地使用泛型进行类或方法的封装。"MVC完整版"可能是该示例中的一个项目,它可能使用了泛型来实现模型-视图-控制器(MVC)架构中的某些功能。...
* ArrayList:Java 中的 ArrayList 是一种常用的集合类。 * LinkedList:Java 中的 LinkedList 是一种链式集合类。 * HashSet:Java 中的 HashSet 是一种无序集合类。 内部类 * 内部类:Java 中的内部类是指在另一...
使用泛型集合维护有继承关系的电影票对象 座位数可以在系统中指定 点击座位可购买不同类型的电影票 使用简单工厂模式创建不同类型的电影票 使用多态实现不同类型电影票的价格计算 使用接口实现电影票的打印 使用序列...
在Java编程语言中,枚举和泛型是两种非常重要的特性,它们分别提供了对特定数据类型和类型安全的集合操作的支持。下面我们将详细探讨这两个主题。 **枚举(Enum)** 枚举类型是Java 5.0引入的新特性,它允许开发者...
这使得枚举成为定义常量集合的最佳选择。 示例1展示了如何定义枚举类`Action`,并且在`doAction`方法中使用枚举值作为参数。这样,编译器会自动检查传入的参数是否是枚举中的有效值,避免了无效输入导致的错误。...
其次,泛型接口与泛型类类似,如`IEnumerable<T>`,它定义了一个可枚举的集合,可以用于遍历各种类型的数据。通过实现这个接口,我们可以使自己的类具备枚举的能力,而无需关心具体的数据类型。 再者,泛型方法是在...
### Java语言基础入门教程知识点详解 #### 10. 枚举与泛型 ##### 10.1 枚举(Enum...枚举提供了一种定义固定集合的有效方式,而泛型则提高了代码的灵活性和安全性。掌握这两种特性能够帮助开发者写出更高质量的代码。
Java泛型和集合是Java编程语言中的核心特性,...8. **枚举类型与泛型**:结合使用枚举和泛型来增强类型安全。 通过深入学习这本书籍,开发者可以更好地掌握Java泛型和集合的精髓,从而编写出更安全、更高效的代码。