集合和泛型精选

合集下载

Java程序设计基础第八章 集合和泛型

Java程序设计基础第八章 集合和泛型

8.1 集合类(续)
Map的实现类有HashMap、 IdentityHashMap、WeakHashMap、 TreeMap,以及LinkedHashMap子类,这 些类都是非线程安全的,WeakHashMap是一 种改进的HashMap,如果一个key不再被外部 所引用,那么该key可以被GC回收。 HashTable是线程安全的,HashTable不能 插入null空元素。
8.1 集合类(续)
TreeSet将元素存储在树中,但元素按有序方式 存储,可以按任何次序向TreeSet中添加元素, 但遍历TreeSet时,元素出现的序列是有序的。 在TreeSet中插入元素的效率要低于在 HashSet中插入元素,但比把元素插入到数组 或链表的合适位置要快。 SortedSet接口用于按照排好顺序元素的集合, 排序方式可以是元素的自然顺序(如数字按升序 排列),也可以是由Comparator指定的顺序
8.1 集合类(续)
在ArrayList的前面或中间插入数据时,必须将 其后的所有数据相应的后移,花费较多时间,所 以,当程序添加元素主要是在后面,并且需要随 机地访问其中的元素时,优先使用ArrayList会 得到比较好的性能。 访问LinkedList中的某个元素时,就必须从链 表的一端开始沿着连接方向一个一个元素地去查 找,直到找到所需的元素为止,但在添加元素到 原有元素中间时效率很高,所以,当程序需要经 常在指定位置添加元素,并且按照顺序访问其中 的元素时,优先使用LinkedList。
8.1 集合类(续)
集合是一种可以快速找到已存在元素的数据结构 ,但通常进行元素查找时,是通过某些关键信息 来查找与之相关的对象,映射类是解决此类问题 的数据结构之一。映射类储存的数据是“键/值” 对,将“键”与“值”关联起来,给出键就可以查找 到与之相关的值。

java第10章 集合、泛型、反射和标注

java第10章 集合、泛型、反射和标注

10.2.3 ArrayList类 ArrayList类的定义形式: public class ArrayList<E>
extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
【例10.8】ArrayList类的使用。Example10_08.java
10.1.2 声明泛型类
泛型类是带有类型参数的类,类中有域和行为。泛型类的定义形式:
class 泛型类名<类型参数表列> {
//类体 }
10.1.2 声明泛型类 定义泛型类的对象:
泛型类名[<实际类型表列>] 对象名=new 泛型类名[<实际类型表列>]([形参表]); 或
泛型类名[<实际类型表列>] 对象名=new 泛型类名[<>]([形参表]);
也可以用“?”代替“实际参数表列”
10.1.2 声明泛型类
【例10.1】设计一个数组类,该类的对象能表示任何类型的对象数组。 Example10_1.java
如果使用泛型,则可以保证每一个数组类对象中的元素都是同一 类型。
【例10.2】定义一个泛型数组类,并创建数组类的对象。 Example10_2.java
10.3.1 反射
2. Constructor类
类型 Class Class
方法 getDeclaringClass() getDeclaringClass()
Class [] getParameterTypes()
反射可以实现程序的动态效果。通过反射,可以在程序运行过程 中知道程序中使用了哪些类及类中的属性和方法。

C#中的泛型和泛型集合

C#中的泛型和泛型集合

C#中的泛型和泛型集合⼀、什么是泛型?泛型是C#语⾔和公共语⾔运⾏库(CLR)中的⼀个新功能,它将类型参数的概念引⼊.NET Framework。

类型参数使得设计某些类和⽅法成为可能,例如,通过使⽤泛型类型参数T,可以⼤⼤简化类型之间的强制转换或装箱操作的过程(下⼀篇将说明如何解决装箱、拆箱问题)。

说⽩了,泛型就是通过参数化类型来实现在同⼀份代码上操作多种数据类型,利⽤“参数化类型”将类型抽象化,从⽽实现灵活的复⽤。

使⽤泛型给代码带来的5点好处:1、可以做⼤限度的重⽤代码、保护类型的安全以及提⾼性能。

2、可以创建集合类。

3、可以创建⾃⼰的泛型接⼝、泛型⽅法、泛型类、泛型事件和泛型委托。

4、可以对泛型类进⾏约束,以访问特定数据类型的⽅法。

5、关于泛型数据类型中使⽤的类型的信息,可在运⾏时通过反射获取。

例⼦:using System;namespace ConsoleApp{class Program{class Test<T>{public T obj;public Test(T obj){this.obj = obj;}}static void Main(string[] args){int obj1 = 2;var test = new Test<int>(obj1);Console.WriteLine("int:" + test.obj);string obj2 = "hello world";var test1 = new Test<string>(obj2);Console.WriteLine("String:" + test1.obj);Console.ReadKey();}}} 输出结果是: int:2 String:hello world 分析: 1、 Test是⼀个泛型类。

集合与泛型上机练习的PPT

集合与泛型上机练习的PPT

∙使用Hashtable集合对象存储电脑信息∙员工数据输入第一部分练习1:使用Hashtable对象存储数据项问题编写一个电脑信息类:包括电脑的型号、价格和出厂日期。

程序应根据用户输入的型号来显示相应的电脑信息。

要求使用Hashtable对象存储电脑信息,并且按照型号排列输出,可以输入一个型号,程序检查判断集合中是否存在该型号的电脑,如果存在则显示具体信息。

分析指导教师分析解题思路可以创建一个包含电脑型号、价格和出厂日期的类Computer,电脑的详细信息再作为一个元素存在Hashtable集合中排列输出可以通过下面这种方式输出:(1)创建一个基于控制台的C#应用程序,命名为“HashtableExm”。

(2)创建Computer类。

(3)完整的代码如下:(4)通过从菜单中选择“生成”→“生成解决方案”,来生成该解决方案。

(5)通过从菜单中选择“调试”→“开始执行(不调试)”选项来执行此应用程序。

程序运行效果图指导教师检查学生进度练习2:员工数据输入问题在一个公司的员工管理系统中,通常会通过窗体输入员工的信息,包括员工的编号,姓名,部门,工资等情况。

现不使用数据库技术,使用SortedLis t来存储不同员工的信息,并且,录入的员工都显示在一个列表框中,还可以删除列表框中的员工,但是同时要删除SortedList对象中的员工,因此SortedLis t对象中的数据要与类表框的数据同步。

界面要求如图:员工信息输入在左边的文本框中输入数据以后,单击“添加”按钮可以把数据添加到SortedList对象中,同时姓名添加到右边列表框中;在右边的列表框中选择一个姓名信息,单击下方的“删除”按钮,可以把该员工删除,同时,SortedList对象中的员工信息也被删除。

推荐步骤:(1)先创建一个员工类Employee来保存员工属性。

(2)创建一个窗体,对照界面,添加相应的控件及其事件。

(3)窗体类完整的代码如下:(4)生成和执行此应用程序,效果如下图所示:程序运行结果图。

第10章 集合和泛型

第10章 集合和泛型

Page:15
10.1 集合
10.1.3 Stack类
第 十 章 集 合 和 泛 型
using System; using System.Collections; namespace Chapter10_3 { class CoinBox { Stack coinBox = new Stack();//容纳硬币的栈 public void PushCoin()//向栈投放硬币 { int number; Console.WriteLine("请输入硬币的面额(1/5/10),按-1退 出"); number =int.Parse(Console.ReadLine()); while(number!=-1) {
Page:7
10.1 集合
10.1.2 Hashtable类
第 十 章 集 合 和 泛 型
【学一学】 哈希表Hashtable是一种数据字典集合,它将数据作为一组键/值对来 保存。集合里的值根据健的编码来组织的。显然,如果要保存类似邮 政编号/地名这样的数据对,采用哈希表无疑是不错的选择。不能采用 索引访问哈希表中的值,但能通过健来访问哈希表中的值。表10-2列 出了Hashtable类常用的属性和方法。
Page:10
10.1 集合
第 十 章 集 合 和 泛 型
10.1.2 Hashtable类 hash.Add(code, placeName); } else break; } } public string FindPlace(string postalcode)//按邮编查找地名 { return hash[postalcode]!=null?hash[postalcode].ToString():"没有找到"; } public void DeleteItem(string postalcode)//删除指定邮编 对应的元素 {

数组、集合和泛型

数组、集合和泛型

4.1 数组的概念
数组具有以下属性: (1)数组可以是一维、多维或交错的。 (2)数值数组元素的默认值设置为零,而引用元
素的默认值设置为 null。 (3)交错数组是数组的数组,因此,它的元素是
引用类型,初始化为 null。 (4)数组的索引(序号)从零开始:具有 n 个元
素的数组的索引是从 0 到 n-1。 (5)数组元素可以是任何类型,包括数组类型。
第4章 数组、集.4 4.5 4.6 4.7 4.8 4.9
数组的概念 声明、创建数组 初始化数组变量 遍历数组元素 多维数组 交错数组 隐式类型数组 集合与集合接口 泛型集合
27 五月 2020
4.1 数组的概念
在程序设计过程中,经常出现同一种类型的数
数组的遍历一般通过循环实现,利用元素序号的有 规律变化,访问到数组中的每一个元素。
27 五月 2020
4.4 遍历数组元素
数组的遍历除了可以用for形式的循环实现外,还可 以通过while或do while形式的循环完成,此外,还可以 使用foreach形式完成,foreach语句提供一种简单、明 了的方法来循环访问数组的元素。与for相比,foreach只
门课程的多维数组代码为: float[,] studentsGrades = new float[35, 5];
27 五月 2020
4.2 声明、创建数组
对于交错数组,则可以在第一次创建过程中指定外层 数组元素的个数,每个数组元素所对应的数组中所包含元 素的个数可以在后继代码中指定,如以下示例。
", "赵六", "丁七" };
此数组中元素值分别为“张三”、“李四”、“王五”、“赵六 ”和“丁七”,同时,由于在初始化时,只提供了5个元素,所 以数组的大小被确定为5。

day02【Collection、泛型】

day02【Collection、泛型】
练习2:遍历集合
public class NBFor { public static void main(String[] args) { Collection<String> coll = new ArrayList<String>(); coll.add("小河神"); coll.add("老河神"); coll.add("神婆"); //使用增强for遍历 for(String s :coll){//接收变量s代表 代表被遍历到的集合元素 System.out.println(s); } }
2.3 增强for
增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原 理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:
for(元素的数据类型 //写操作代码
}
变量 : Collection集合or数组){
Iterator接口的常用方法如下:
public E next() :返回迭代的下一个元素。 public boolean hasNext() :如果仍有元素可以迭代,则返回 true。
接下来我们通过案例学习如何使用Iterator迭代集合中元素:
public class IteratorDemo { public static void main(String[] args) { // 使用多态方式 创建对象 Collection<String> coll = new ArrayList<String>();
2.2 迭代器的实现原理
我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用t集合的iterator()方法获得 迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取 出,否则说明已到达了集合末尾,停止遍历元素。

Map接口下的集合和泛型理解

Map接口下的集合和泛型理解

Map接⼝下的集合和泛型理解⼀、Map接⼝1、 Map接⼝就是最顶层了,上⾯没有继承了。

Map是⼀个容器接⼝,它与前⾯学的List.Set容器不同的是前⾯学的这些容器,⼀次只能传⼊⼀个元素,但是Map容器⼀次可以传⼊⼀对元素(键值对),这个键值对是封装在entry对象内部的,⼀个entry对象就是⼀个键值对。

Map容器的特点:键是不能重复的,值是可以重复的,并且⼀个键只能对应⼀个值。

Set 容器也是⽆序不可重复的,Map接⼝和Collection接⼝是两个并列的没有任何关系的集合(都是接⼝) Map接⼝下⾯有HashMap集合、TreeMap集合、Hashtable集合;Hashtable集合下⾯有properties集合。

⼆、HashMap集合1、HashMap是⽆序的,不可重复的(判断重复的标准是键值对的键不能重复,也是通过HashCode⽅法和equals⽅法来判断的), HashMap的底层也是数组加链表实现的(HashSet底层也都是数组加链表的结构实现的),HashMap可以⽤null作为键和值,并且是线程不安全的HashMap构造⽅法:HashMap() 创建⼀个HashMap对象HashMap(Map m) 创建⼀个键值对与m相同的HashMap集合2、HashMap常⽤⽅法V put(K key, V value) 添加/修改指定的映射返回的是:被替换的值boolean containsKey(Object key) 判断map容器是否包含指定的键boolean containsValue(Object value) 判断map容器是否包含指定的值V get(Object key) 根据指定的键获取指定的值void putAll(Map m) 把m集合中所有的元素,添加到当前map容器中V remove(Object key) 根据指定的键删除对应的映射int size() 获取map容器中元素的个数void clear() 移除所有映射关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档