集合小案例

LinkHash**特性:唯一和有序


由【哈希表】保证【键】的唯一性,由【链表】保证【键】的有序性(存储和取出的顺序一致)

【LinkHashSet】和【LinkHashMap key】的特性是完全一样的!



public class Test {

    public static void main(String[] args) {

        LinkedHashMap<Person, String> linkedHashMap = new LinkedHashMap<Person, String>();

        linkedHashMap.put(new Person("ea", 150), "包青天");

        linkedHashMap.put(new Person("ab", 27), "包青天");

        linkedHashMap.put(new Person("c", 150), "包青天");

        linkedHashMap.put(new Person("c", 160), "baiqiantao");

        linkedHashMap.put(new Person("ea", 160), "baiqiantao");

        linkedHashMap.put(new Person("d", 27), "包青天");

        System.out.println(linkedHashMap);//{ea,150=baiqiantao, ab,27=包青天, c,150=baiqiantao, d,27=包青天}

    }

}

class Person {     public String name;     public int age;     public Person(String name, int age) {         this.name = name;         this.age = age;     }     public int hashCode() {         int newAge = this.age;         if (age > 150) newAge = 150;         return name.hashCode() + newAge;//这里的hashCode是基于String类的hashCode更改的     }     public boolean equals(Object obj) {         if (this == obj) return true;         if (!(obj instanceof Person)) return false;         Person p = (Person) obj;         return this.name.equals(p.name);//只要name相同就认为equal值为true     }     public String toString() {         //默认返回值是【person.getClass().getName() + ‘@‘ + Integer.toHexString(person.hashCode())】         return name + "," + age;     } }

Collection案例:模拟斗地主的牌局


public class Test {

    public static void main(String[] args) {

        // 创建一个牌盒

        List<PokerBean> list = new ArrayList<PokerBean>();

        String[] colors = { "?", "?", "?", "?" };

        String[] numbers = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };

        // 装牌

        for (int i = 0; i < numbers.length; i++) {

            for (String color : colors) {

                list.add(new PokerBean(color, numbers[i], i + 1));

            }

        }

        list.add(new PokerBean("小王", "小王", 14));

        list.add(new PokerBean("大王", "小王", 15));

        // 洗牌

        Collections.shuffle(list);

        // 发牌

        Set<PokerBean> player_1 = new TreeSet<PokerBean>();

        Set<PokerBean> player_2 = new TreeSet<PokerBean>();

        Set<PokerBean> player_3 = new TreeSet<PokerBean>();

        Set<PokerBean> diPai = new TreeSet<PokerBean>();

        for (int x = 0; x < list.size(); x++) {

            if (x >= list.size() - 3) diPai.add(list.get(x));

            else if (x % 3 == 0) player_1.add(list.get(x));

            else if (x % 3 == 1) player_2.add(list.get(x));

            else if (x % 3 == 2) player_3.add(list.get(x));

        }

        //看牌

        System.out.println("玩家一的牌为:" + player_1);

        System.out.println("玩家二的牌为:" + player_2);

        System.out.println("地主家的牌为:" + player_3);

        System.out.println("底牌为:" + diPai);

    }

}

class PokerBean implements Comparable<PokerBean> {     public String color;     public String numberString;     public int numberInt;     public PokerBean(String color, String numberString, int numberInt) {         this.color = color;         this.numberString = numberString;         this.numberInt = numberInt;     }     @Override     public String toString() {         switch (numberInt) {         case 10:             return "[" + color + numberString + "]";//没有空格         case 14:         case 15:             return "[" + numberString + "]";//没有空格,没有数字         default:             return "[ " + color + numberString + " ]";         }     }     @Override     public int compareTo(PokerBean o) {         int tem = this.numberInt - o.numberInt;         return tem == 0 ? this.color.compareTo(o.color) : tem;     } }

TreeMap案例:统计字符出现的次数


public class Test {

    public static void main(String[] args) {

        String str = "fd*+a//dA11  \n    aDdD-d";

        System.out.println(getcharCount(str));

    }

    // 获取字符串中每一个字母出现的次数,要求打印结果形式为:a-2 \n b-1 形式     public static String getcharCount(String str) {         TreeMap<Character, Integer> map = new TreeMap<Character, Integer>();         char[] arr = str.toCharArray();         for (int i = 0; i < arr.length; i++) {             if (!(arr[i] <= ‘z‘ && arr[i] >= ‘a‘ || arr[i] <= ‘Z‘ && arr[i] >= ‘A‘)) //限制查询范围             continue;//表示不再执行后面的代码,继续下次遍历!             Integer value = map.get(arr[i]);//Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.              if (value == null) map.put(arr[i], 1);//若此字符不存在,则存入此字符,将值设为1             else map.put(arr[i], value + 1);//若此字符已经存在,则值加1         }         return mapToString(map);     }
    //将集合中的内容以指定格式的字符串形式返回     private static <K, V> String mapToString(Map<K, V> map) {         StringBuilder sb = new StringBuilder();         Iterator<K> it = map.keySet().iterator();         while (it.hasNext()) {             K key = it.next();             V value = map.get(key);             sb.append(key + "-" + value + "\n");         }         return sb.toString();     } }

来自为知笔记(Wiz)

时间: 2024-10-09 17:36:55

集合小案例的相关文章

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

Cookie小案例-----记住浏览过的商品记录

Cookie小案例------记住浏览过的商品记录 我们知道,这个功能在电商项目中很常见.这里处理请求和页面显示都是由servlet实现,主要是为了体现cookie的作用, 实现功能如下: 1,点击购买的商品后,显示到另一页面 2,记住用户浏览过的商品,并在页面时中显示 3,当浏览过的数量超过最大值限度时,最下面一个商品被挤下去 4,当浏览过的商品本身就在浏览记录中,显示列表将其从中间移到最上面 显示一打开网站的样子和显示用户的浏览记录: package cn.itcast.cookie; im

Session小案例-----简单购物车的使用

Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示同样用的都是servlet. 功能实现如下: 1,显示网站的所有商品 2,用户点击购买后,能够记住用户选择的商品 3,实现了多个会话共享一个session 4, 实现了浏览器禁用cookie后数据共享问题的处理 首页: package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.io

ASP入门(八)-Request对象小案例

我们将制作一个能够记住访问者姓名的页面,在这个小案例中,你将学会如何使用Request对象的Cookies.Form以及ServerVariables集合的值,还可以学习到如何使用Response对象来发送Cookies. 首先来看看程序代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset

几个数据库的小案例(三):用递归实现TreeView层级显示

从这个小案例我学到了不少知识.这些无论如何无法从书里得来.正所谓实践出真知,学习编程需要大量实践这句话永不过时. 首先:好的代码和坏的代码带来的性能上的差异很明显.好的策略可以让你的程序运行速度大大加快.而差的代码则能让你的程序直接卡死. 这是我写的递归填充TreeView: private void GetNode1(TreeNode tNod, int id) { using (SqlConnection conn = new SqlConnection("server=.\\sqlexpr

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }

十六、lvm、磁盘故障小案例

lvm 物理卷:磁盘分区. 卷组:多个物理卷的集合. 逻辑卷:在卷组的基础上划分出来的逻辑卷. 最终在逻辑卷的基础上进行格式化,再挂载到系统里面去使用. 如何操作: 1.fdisk /dev/sdb 2.n 创建3个新分区,分别1G 3.t 改变分区类型为8e(lvm) 设备 Boot      Start         End      Blocks   Id  System /dev/sdb1            2048     2099199     1048576   83  Li

Linux centosVMware 命令 lvm、磁盘故障小案例

一.lvm命令 LVM:逻辑分区管理,可基于动态的扩展缩小硬件设备的使用空间,注意:lvm磁盘复杂,由于使用lvm,数据丢失恢复起来有一定风险.概念:pv.VG.lvpv(物理卷,有pp基本单位构成):物理磁盘VG(卷组,由pv基本单位构成):一个或多个物理磁盘(容量)的集合lv(逻辑卷,由lp基本单位构成):VG下划分出来的使用分区(空间)fs:file system 文件系统硬件设备的一个属性设备文件:硬件文件,如一块硬盘.一块U盘.一个(硬盘)分区等.当将他们格式化的时候就是选择把他们格式

javascript常用小案例

常用javascript小案例 样式调节 //注: 这个可以控制td中的字段成行显示 #modelInfos td,th { white-space: nowrap; } //文本输入框随着内容尺寸往下变大,在input框中加入这两个属性,然后就可以控制文本输入框的大小尺寸随着内容而变 onpropertychange="this.style.height=this.scrollHeight + 'px'" oninput="this.style.height=this.sc