Java 泛型与集合
1、List练习,请用泛型的写法来完成。
已知有一个Worker 类如下:
public class Worker {
private int age;
private String name;
private double salary;
public Worker (){}
public Worker (String name, int age, double salary){
this.name = name; this.age = age;
this.salary = salary; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getSalary(){ return salary; }
public void setSalary(double salary){ this.salary = salary; }
public void work(){
System.out.println(name + “ work”); }
}
完成下面的要求
1) 创建一个List,在List 中增加三个工人,基本信息如下:
姓名 年龄 工资
zhang3 18 3000
li4 25 3500
wang5 22 3200
2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300
3) 删除wang5 的信息
4) 利用for 循环遍历,打印List 中所有工人的信息
5) 利用迭代遍历,对List 中所有的工人调用work 方法。
- public class Worker {
- private int age;
- private String name;
- private double salary;
- public Worker() {
- }
- public Worker(int age, String name, double salary) {
- super();
- this.age = age;
- this.name = name;
- this.salary = salary;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public double getSalary() {
- return salary;
- }
- public void setSalary(double salary) {
- this.salary = salary;
- }
- @Override
- public String toString() {
- return "Worker [age=" + age + ", name=" + name + ", salary=" + salary + "]";
- }
- }
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- public class TestWorker {
- public static void main(String[] args) {
- List<Worker> list = new ArrayList<>();
- list.add(new Worker(18,"zhang3",3000));
- list.add(new Worker(25,"li4",3500));
- list.add(new Worker(22,"wang5",3200));
- list.add(1,new Worker(24,"zhao6",3300));
- list.remove(3);
- for(int i = 0;i<list.size();i++)
- {
- System.out.println(list.get(i));
- }
- System.out.println("迭代器方式");
- Iterator<Worker> it= list.iterator();
- //判断能否移动
- while(it.hasNext())
- {
- //移动指针到下一条数据,同时获取数据
- Worker p=it.next();
- System.out.println(p.toString());
- }
- }
- }
2、List集合遍历
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口Iterator。为了使初学者熟悉Iterator迭代器的使用,本案例将演示如何使用Iterator迭代器遍历集合中的元素。
设计思路(实现原理)
1) 编写一个类Example02
2) 在类中定义一个List集合,并向集合中添加数据
3) 通过调用List集合的iterator()方法获得迭代器对象
4) 在while循环条件中使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素
- import java.util.*;
- public class Example02 {
- public static void main(String[] args) {
- List<String> list = new ArrayList<String>();
- list.add("abc1");
- list.add("abc2");
- list.add("abc3");
- list.add("abc4");
- Iterator<String> it = list.iterator();
- while (it.hasNext()) {
- Object obj = it.next();
- System.out.println(obj);
- }
- }
- }
3、去除集合中的重复元素。
(1)编写一个类,类中有二个方法,一个能够去除给定ArrayList中的重复元素,并得到新的ArrayList;一个能够输出集合,使得在运行过程中能观察到集合中元素的变化。
(2)编写一个主类,测试上述类的功能,并给出测试结果。
- import java.util.ArrayList;
- import java.util.HashSet;
- public class RemoveByHashSet {
- public static void main(String[] args){
- ArrayList<String> l=new ArrayList<String>();
- l.add("java");
- l.add("php");
- l.add("C");
- l.add("java");
- l.add("C");
- System.out.println(l);
- HashSet<String> s=new HashSet<String>(l);
- ArrayList<String> al=new ArrayList<String>(s);
- System.out.println(al);
- }
- }
HashMap的使用,请用泛型的写法。
已知某学校的教学课程内容安排如下:
完成下列要求:
(1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排。
(2) 增加了一位新老师Allen 教JDBC
(3) Lucy 改为教CoreJava
(4) 用两种方式遍历Map,输出所有的老师及老师教授的课程
(5) 利用Map,输出所有教JSP 的老师。
- import java.util.*;
- public class CourseMap {
- public static void main(String[] args) {
- Map<String, String> map = new HashMap<String, String>();
- map.put("Tom","CoreJava");
- map.put("John","Oracle");
- map.put("Susan","Oracle");
- map.put("Jerry","JDBC");
- map.put("Jim","Unix");
- map.put("Kevin","JSP");
- map.put("Lucy","JSP");
- System.out.println("Map修改前遍历:");
- Set<String> keySet = map.keySet();
- for(String key : keySet){
- System.out.println(key+"\t"+map.get(key));
- }
- map.put("Allen","JDBC");
- map.put("Lucy","CoreJava");
- System.out.println("Map修改后遍历:");
- Iterator<String> iterator = keySet.iterator();
- while (iterator.hasNext()) {
- String key = (String) iterator.next();
- System.out.println(key+"\t"+map.get(key));
- }
- System.out.println("教授JSP的老师姓名:");
- for(String key : keySet){
- if(map.get(key).equals("JSP")){
- System.out.println(key);
- }
- }
- }
- }
Java 泛型与集合的更多相关文章
- Java泛型和集合之泛型VS模板
Java的泛型很像C++中的模板,说到Java 泛型和C++中的模板的关系时,有两个重要的方面需要被考虑到:语法和语义.语法看起来是相似的,可是语义却明显是不同的. 在语法上讲,选择尖括号 是因为他 ...
- Java泛型和集合之泛型介绍
在声明一个接口和类的时候可以使用尖括号带有一个或者多个参数但是当你在声明属于一个接口或者类的变量的时候或者你在创建一个类实例的时候需要提供他们的具体类型.我们来看下下面这个例子 List<Str ...
- Java泛型与集合笔记
第一章 Java的泛型为了兼容性和防止代码爆炸,在编译成字节碼时会进行类型擦除,编译器自动添加代码做类型转换(用到List<Integer>的地方用Integer来做转换),自动做装箱拆箱 ...
- java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...
- 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现
不多说,直接上干货! 先来看个泛型概念提出的背景的例子. GenericDemo.java package zhouls.bigdata.DataFeatureSelection; import ja ...
- java数据类型:集合存储元素类型限制<泛型> ;自定义类指定泛型<T> 以及限制用法;派生子类泛型<T> super(泛型内参数); 泛型通配符?以及?限制用法
问题背景 Java 集合有个缺点,把一个对象"丢进"集合里之后,集合就会"忘记"这个对象的数据类型,当再次取出该对象时 该对象的编译类型就变Object类型(其 ...
- Java:泛型基础
泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...
- java泛型基础
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法. Ja ...
- 关于Java泛型的使用
在目前我遇到的java项目中,泛型应用的最多的就属集合了.当要从数据库取出多个对象或者说是多条记录时,往往都要使用集合,那么为什么这么使用,或者使用时有什么要注意的地方,请关注以下内容. 感谢Wind ...
随机推荐
- 老男孩Linux运维50期 --于海科--决心书
1.我叫于海科,来自于甘肃省天水市,之前就读于兰州石化职业技术学院,我是听之前的学长说老男孩教育出来就业不错,我特此来这培训希望出来能够找到一份不错的工作.2.五个月学完,目标薪资是11k.3.达到目 ...
- MySQL权限原理及删除MySQL的匿名账户
MySQL权限系统的工作原理 MySQL权限系统通过下面两个阶段进行认证: (1)对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接: (2)对通过认证的合法用户赋予相应的权限,用户可 ...
- bzoj 4152[AMPPZ2014]The Captain
bzoj 4152[AMPPZ2014]The Captain 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. ...
- python(If 判断)
一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...
- Nginx编译与安装
我的系统是CentOS-7,Nginx的源码可以在官网下载,网址为:http://nginx.org/en/download.html,我下载了目前的最新版本nginx-1.9.3.tar.gz 下载 ...
- docker批量删除本地镜像和容器
长时间运行docker,每次只用docker kill去停止容器,但是从没删除过本地镜像,导致有上百个镜像在占用内存. 1.批量停止容器 docker container stop $(docker ...
- Redis系列(六):设置/移除键的过期时间
本篇博客是Redis系列的第6篇,主要讲解以下内容: 数据库数量 切换目标数据库 设置键的过期时间 移除键的过期时间 本系列的前5篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安 ...
- 初识CoAP协议
前言 本文介绍什么是CoAP,以及如何在物联网设备上使用它.CoAP是一种物联网协议,具有一些专门为受约束的设备而设计的有趣功能.还有其他一些可用于构建物联网解决方案的IoT协议,例如MQTT等. 物 ...
- 扩欧(exgcd讲解)
注意本文的证明都来源于这位大大大大大大大牛 知识点.扩展欧几里得求逆元 看完下面的证明后建议联系一下这题同余方程 可以对exgcd的用途和写法有有初步了解. \(问题描述:对于三个自然数 a,b,c ...
- crontab自动启动小任务例子(每一分钟将当前日期打入一个文件)
crontab -l #查看当前定时任务列表 显示没有,那么我们来安装一下(必须在root用户下) – yum install vixie-cron – yum install crontabs ...