集合

  • 一、集合相关案例
    • 1.泛型通配符案例
    • 2.集合工具类(Collections工具类)
    • 3.TreeSet和TreeMap案例
    • 4.HashMap案例
    • 5.HashSet案例
    • 6.TreeSet案例
    • 7.记事本案例
    • 8.嵌套集合案例
  • 总结

一、集合相关案例

1.泛型通配符案例

案例:动物类Animal有一个方法,返回动物的腿的个数。子类有狗狗和企鹅,分别重写该方 法,返回各自腿的个数。

编写一个测试类,定义一个方法,该方法可以计算出一个动物集合List共有多少条腿,并输 出。

再定义一个测试方法,分别计算一批动物(2只狗狗和3只企鹅)和一批狗狗(3只),一批 企鹅(3只)的腿的数量。
Animal类

package fx1;public abstract class Animal {//父类中的方法,因为不确定返回腿的个数,因此设计为抽象方法public abstract int tui();
}

Dog类

package fx1;public class Dog extends Animal{@Overridepublic int tui() {return 4;}
}

Penguin类

package fx1;public class Penguin extends Animal{@Overridepublic int tui() {return 2;}
}

Test类

package fx1;import java.util.ArrayList;
import java.util.List;public class Test {public static void test(List<? extends Animal> animals){int sum=0;for (Animal a : animals) {sum+=a.tui();}System.out.println("这批动物的腿的个数:"+sum);}public static void main(String[] args) {//2只狗狗和3只企鹅ArrayList<Animal> arr = new ArrayList();arr.add(new Dog());arr.add(new Dog());arr.add(new Penguin());arr.add(new Penguin());arr.add(new Penguin());test(arr);//3只狗狗ArrayList<Dog> dog = new ArrayList();dog.add(new Dog());dog.add(new Dog());dog.add(new Dog());test(dog);//3只企鹅ArrayList<Penguin> p = new ArrayList();p.add(new Penguin());p.add(new Penguin());p.add(new Penguin());test(p);}
}

2.集合工具类(Collections工具类)

案例:1.现有5只猴子(姓名,年龄),将他们存入List集合中,先随机打乱,然后使用工具类,对 这一群猴子按照年龄进行排序。

2.交换集合中的第一个和第三个猴子

3.查找名称叫肉肉的猴子

package collection;import java.util.*;
//Collections工具类:
public class Hello1 {public static void main(String[] args) {Integer[] arr={1,5,4,6,7,9,3};List list = Arrays.asList(arr);//shuffle随机打乱Collections.shuffle(list);System.out.println(list);//排序sortCollections.sort(list);System.out.println(list);//查找 binarySearch:前提是集合中的元素必须按某种规则升序排序System.out.println(Collections.binarySearch(list, 5));//交换 swapCollections.swap(list,1,3);System.out.println(list);}
}
package collection;public class Monkey implements Comparable<Monkey>{private String name;private int age;@Overridepublic int compareTo(Monkey monkey) {return this.getAge()-monkey.getAge();}public Monkey(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Monkey() {}@Overridepublic String toString() {return "Monkey{" +"name='" + name + '\'' +", age=" + age +'}';}}
package collection;import java.util.Collections;
import java.util.LinkedList;public class TestMonkey {public static void main(String[] args) {LinkedList list=new LinkedList();list.add(new Monkey("狒狒",22));list.add(new Monkey("旺财",18));list.add(new Monkey("肉肉",14));list.add(new Monkey("团子",15));list.add(new Monkey("菲菲",19));//年龄排序Collections.sort(list);System.out.println(list);//交换第一只和第三只Collections.swap(list,0,2);System.out.println(list);//查找叫肉肉的猴子Collections.sort(list);System.out.println(Collections.binarySearch(list,new Monkey("狒狒",22)));}
}

3.TreeSet和TreeMap案例

案例:1.将5个大象(姓名,年龄,体重)存入TreeSet中,并输出

2.给每一个大象安排一个主人,存入TreeMap中,并输出

package anli;public class Elephant implements Comparable<Elephant>{private String name;private int age;private double weight;@Overridepublic int compareTo(Elephant o) {return this.age-o.age;}public Elephant(String name, int age, double weight) {this.name = name;this.age = age;this.weight = weight;}public Elephant() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getWeight() {return weight;}public void setWeight(double weight) {this.weight = weight;}@Overridepublic String toString() {return "Elephant{" +"name='" + name + '\'' +", age=" + age +", weight=" + weight +'}';}}
package anli;import java.util.TreeMap;
import java.util.TreeSet;
/*1.将5个大象(姓名,年龄,体重)存入TreeSet中,并输出
2.给每一个大象安排一个主人,存入TreeMap中,并输出*/
public class TestElephant {public static void main(String[] args) {TreeSet<Elephant> map = new TreeSet<Elephant>((o1,o2)->Double.compare(o1.getWeight(),o2.getWeight()));map.add(new Elephant("菲菲",10,200.0));map.add(new Elephant("狒狒",5,100.0));map.add(new Elephant("飞飞",15,150.0));map.add(new Elephant("肥肥",9,180.0));map.add(new Elephant("妃妃",20,300.0));System.out.println(map);TreeMap map1 = new TreeMap();map1.put("主人1",new Elephant("菲菲",10,200.0));map1.put("主人2",new Elephant("狒狒",5,100.0));map1.put("主人3",new Elephant("飞飞",15,150.0));map1.put("主人4",new Elephant("肥肥",9,180.0));map1.put("主人5",new Elephant("妃妃",20,300.0));System.out.println(map1);}
}

4.HashMap案例

案例:三国时期,刘备派关羽守樊城,张飞守新野,赵子龙守徐州,他自己坐镇荆州。
使用HashMap和City类实现,并打印输出,张飞守的是那座城?所有人员守城信息。

package map;public class City {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public City(String name) {this.name = name;}public City() {}@Overridepublic String toString() {return "{" +"name='" + name + '\'' +'}';}
}
package map;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Hello1 {public static void main(String[] args) {HashMap map = new HashMap();map.put("关羽",new City("樊城"));map.put("张飞",new City("新野"));map.put("赵子龙",new City("徐州"));map.put("刘备",new City("荆州"));//遍历方式1--所有的keySet keys = map.keySet();for (Object key : keys) {System.out.println(key+"--"+map.get(key));}//遍历方式2--所有的valueCollection values = map.values();for (Object v : values) {System.out.println(v);}//遍历方式3--所有的entry:k-vSet entrySet = map.entrySet();for (Object o : entrySet) {Map.Entry entry=(Map.Entry) o;System.out.println(entry.getKey()+"--"+entry.getValue());}//常用方法map.put("诸葛亮",new City("湘潭"));map.remove("刘备");map.get("诸葛亮");map.containsKey("赵子龙");map.containsValue("荆州");map.isEmpty();map.clear();map.size();map.keySet();map.values();}
}

5.HashSet案例

案例:定义一个字符串“我爱北京天安门,天安门上太阳升”,要求使用HashSet元素不重复的特点,过滤掉字符串中重复出现的文字。可以结合StringBuilder实现。

package work2;import java.util.HashSet;
import java.util.LinkedHashSet;public class Work2 {public static void main(String[] args) {String s="我爱北京天安门,天安门上太阳升";char[] chars=s.toCharArray();//方法一LinkedHashSet set = new LinkedHashSet();//有序不重复for (int i = 0; i < chars.length; i++) {set.add(chars[i]);}for (Object o : set) {System.out.print(o);}System.out.println();//方法二HashSet hs = new HashSet();StringBuffer sb = new StringBuffer();for (int i = 0; i < chars.length; i++) {if (hs.add(chars[i])){sb.append(chars[i]);}}System.out.println(sb);}
}

6.TreeSet案例

案例:将一系列字符串“hello”,“helloworld”,“how”,“do”,“you”,"what"存入TreeSet集合,要求按照字符串长度进行排序。

package work2;import java.util.Comparator;
import java.util.TreeSet;
/*2.将一系列字符串“hello”,"helloworld","how","do","you","what"存入TreeSet集合,要求按照 字符串长度进行排序。*/
public class Work2 {public static void main(String[] args) {TreeSet<String> set = new TreeSet<String>((s1,s2)->{if (s1.length()!=s2.length())return s1.length()-s2.length();else//长度如果相等,本来会返回0,TreeSet自带去重,  认为相同的元素,只保留一个//因此,此处,就把这种情况的0改为1return 1;});set.add("hello");set.add("helloworld");set.add("how");set.add("do");set.add("you");set.add("what");System.out.println(set);}
}

7.记事本案例

案例:3.有一个记事本,可以记录做了哪些事情和每件事对应得次数。请输入10件事,可以重复,例如:

学java,

打球,

溜冰,

打球,

溜冰,

打球,

打球,

学java,

溜冰,

吃烧烤。

输入结束后,输出每件事和对应得次数,例如:

学java–2次

打球–4次

溜冰–3次

吃烧烤–1次

要求:所选的集合都要用泛型进行约束。

package work3;import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;/*有一个记事本,可以记录做了哪些事情和每件事对应得次数。请输入10件事,可以重复, */
public class Work3 {public static void main(String[] args) {TreeMap<String,Integer> map = new TreeMap();Scanner sc = new Scanner(System.in);for (int i = 1; i < 11 ; i++) {System.out.println("请输入做的第"+i+"件事情");String thing = sc.next();int a=map.containsKey(thing)?map.get(thing)+1:1;map.put(thing,a);}Set<String> keys = map.keySet();for (String key:keys) {System.out.println(key+"--"+map.get(key)+"次");}}
}

8.嵌套集合案例

案例:有一个记事本,能记录周一到周天,每天做的所有事情和事情的次数,周而复始。小明在这个记事本上记录了3周,

package work4;import java.util.*;public class Work4 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//week 共有7个元素TreeMap<String, Map<String,Integer>> week = new TreeMap<String, Map<String,Integer>>();//数据录入for (int i = 1; i <=3 ; i++) {System.out.println("第"+i+"周");Map<String,Integer> map;for (int j = 1; j <=7 ; j++) {map=new HashMap<String, Integer>();//每天都会清空昨天的事情和次数System.out.println("周"+j+":");String things = sc.next();//旅游,逛街,旅游,打台球,吃烧烤,跑步String[] thing_arr=things.split(",");for (String s:thing_arr) {//map存入的是:事情和次数map.put(s,map.containsKey(s)?map.get(s)+1:1);}//第二周,第三周if (week.containsKey("周"+j)){Map<String,Integer> map1=week.get("周"+j);mapAddMap(map1,map);//week.put("周"+j,map);}else {//第一周week.put("周"+j,map);}}}//数据输出  weekSet<Map.Entry<String,Map<String,Integer>>> weeks=week.entrySet();for (Map.Entry<String,Map<String,Integer>> week1:weeks){System.out.println(week1.getKey()+":");Map<String,Integer> map=week1.getValue();Set<Map.Entry<String,Integer>> things=map.entrySet();for (Map.Entry<String,Integer> thing:things) {String key=thing.getKey();Integer count=thing.getValue();System.out.println(key+"--"+count+"次 \t");}System.out.println();//换行}}public static void mapAddMap(Map<String,Integer> map1,Map<String,Integer> map2){Set<String> map2Key=map2.keySet();for (String m2Key:map2Key) {map1.put(m2Key,map1.containsKey(m2Key)?map1.get(m2Key)+map2.get(m2Key):map2.get(m2Key));}}
}

总结

以上就是集合相关的所有案例内容,主要是利用了集合相关的知识来解决相关的问题。

Java中集合相关案例(泛型通配符、Collections工具类、TreeSet、TreeMap、HashMap、HashSet和集合嵌套案例)相关推荐

  1. 集合框架(Map容器/Collections工具类)

    >两大主流:collection.map(接口) 底层实现为数组和链表: RationalRose工具:接口与典型实现类: Map为key和value对的形式; >HashMap(线程不安 ...

  2. java中使用jxl导出excel表格的工具类(全网唯一亲测可用,在原来基础上扩展)

    java中后台导出excel的话,有两种方案,一是使用poi(不过由于是windows版本的,存在不兼容,但功能更多,更强大),而是使用jxl(纯java编写,不过兼容,简单一些),可以设置输出的ex ...

  3. 菜鸟学习笔记:Java提升篇4(容器4——Collections工具类、其他容器)

    菜鸟学习笔记:Java容器4--Collections工具类.其他容器 Collections工具类 容器其他知识点 队列Queue Enumeration接口 Hashtable Propertie ...

  4. android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...

    一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...

  5. 第三次学JAVA再学不好就吃翔(part95)--Collections工具类

    学习笔记,仅供参考,有错必纠 Collections工具类 该类完全由在collection上进行操作或返回 collection 的静态方法组成,它包含在 collection上操作的多态算法,即& ...

  6. Java中使用Base64进行编码解码的工具类-将验证码图片使用Base64编码并返回给前端

    场景 前端使用Vue,验证码图片的src属性来自于后台SpringBoot接口. 后台验证码接口生成验证码图片并将其使用Base64进行编码. 前端就可以直接使用 data:image/png;bas ...

  7. Java中阿里云OSS文件上传工具类

    阿里云OSS文件上传下载工具类 前言: 本质上就是获取配置文件信息,然后注入bean,调用sdk中提供的增删改方法: 为了避免同名文件会替换,用了hutool中唯一id生成+文件名做拼接 导入依赖:→ ...

  8. java方法执行的时间_计算Java中任意一个方法的执行时间的工具类

    1 packagealgorithm.study.utils;2 3 importjava.lang.reflect.Method;4 5 /** 6 * This class is getting ...

  9. java 集合工具类_Java集合中Collections工具类总结

    Collections工具类 Collections 是一个操作 Collection(Set. List )和 Map 等集合的工具类 Collection和Collections的区别? Coll ...

最新文章

  1. php sql中regexp,[NCTF2019]SQLi(regexp注入)
  2. GeoHash核心原理解析
  3. golang 调用 c 动态库so 静态库a
  4. GRE词汇乱序版-夹生的词汇3
  5. 实习第二弹——交换机的配置与统计
  6. centos系统所需软件
  7. 关于开发中的常用手段(个人建议)
  8. OSS音频编程概述(DSP部分)
  9. 全国高校计算机课程教学系列报告会,西安交大承办2013年全国高校物理课程教学系列报告会...
  10. golang 上下文 Context
  11. linux下的shell和脚本
  12. linux mtp设备,这么烂的MTP 为何现在所有Android设备都不能不用
  13. Exchange Server 2016 独立部署/共存部署 (八)—— 边缘角色服务器
  14. 这儿有一个使你网页性能提升10倍的工具
  15. xshell中svn命令整理
  16. 苹果和亚马逊因疑似侵犯云端同步功能专利而被提起美国337调查
  17. 记一次勒索病毒的遭遇
  18. 芯力特SIT1043Q完全替代恩智浦TJA1043
  19. WordPress入门
  20. C语言实现物品竞拍管理系统

热门文章

  1. 他很惊讶_局座您是来参加云栖大会吗?
  2. C# 科学计数法的转换
  3. DirectX 3D 简单渲染流程
  4. 参照国家一级博物馆运行评估指标体系,博物馆综合业务服务平台就该如此建设
  5. 男人20不勤,30不立,40则不富……
  6. Ubuntu下怎么退出vim编辑器
  7. SQL数据库经典题型(1)查询“001“课程比“002“课程成绩高的所有学生的学号
  8. 写java代码用什么软件好,重要概念一网打尽!
  9. 万丰科技机器人排名_中国机器人公司排名是怎样的?
  10. 中软python面试题_我入职中软国际经历告诉你 简历应该这样写