HashSet,TreeSet,HashMap,一对一,一对多

一、Set:就是袋子里数据不重复

 1、  Set和Collection有同样的接口,the Set is exactly a Collection,但是有不同的行为

    这就是继承(子类和父类属于同一种类型)和多态的的思想(同一接口,实现不同的功能)

   1>HashSet :存储方法采用 hashing function,能够快速查找。

   2>TreeSet:keeps elements sorted into  a red-black tree data structue,

           存储方法采用红黑树的结构,输出的结果排序(int 1,2,3...),

   3>LinkedHashSet:also uses hashing for lookup speed, but appears to maintain elements in
insertion order using a linked list.

           存储方法采用 hashing function,但是保持插入的顺序。

2、打开,读一个文件到Set,然后利用分隔符分开形成数组,主要的目的希望输出的数据不重复。

 \\W+:表示分割符号可以不是(a--z A--z - 0--9),即分割符只要不含字母,数子,下划线,全部当成分割符号,

              这样分割符号是\n,逗号,空格等等 ,

   1>lexicographically:字母顺序,默认是区分大小写(ABC....Z abc.....)

   
package holding;
import java.util.Set;
import java.util.TreeSet;
import net.mindview.util.TextFile;

public class UniqueWords {
public static void main(String[] args) {
Set<String> words = new TreeSet<String>(new TextFile("src\\holding\\SetOperations.java", "\\W+"));
Set<String> words1 = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
words1.addAll(new TextFile("src\\holding\\SetOperations.java", "\\W+"));
System.out.println(words);
System.out.print(words1);
}
} //
//输出1: Output:
[A, B, C, Collections, D, E, F, G, H, HashSet, I, J, K, L, M, N, Output,
Print, Set, SetOperations, String, X, Y, Z, add,


//输出2:
[A, add, addAll, added, args, B, C, class, Collections, contains,
containsAll, D, E, F, false, from,


二、Map:一对一对存。

   1、存《字符串,int 》对

            简单例子:1》一家饮料店,想统计早上高峰期2个小时内,各个年龄段的人数

                                2》当打印小票时,就调用统计方法。

  

package holding;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

//方法参数
public class Statistics {
public static void StaPerCount(String person,Map<String,Integer> t )
{
Integer personc=t.get(person);
 t.put(person, personc==null?1:personc+1);  
}
public static void main(String[] args)
{
 Map<String,Integer> m=new HashMap<String,Integer>(); 
 StaPerCount("老人50-60",m);
 StaPerCount("女小孩10-15",m);
 StaPerCount("男小孩15-18",m);
 StaPerCount("女18-23",m);
 StaPerCount("女18-23",m);
 StaPerCount("女18-23",m);
 System.out.println(m);
}
}

2、存《字符串,对象 》对

    Here’s an example that allows you to use a String description to look up Pet objects

package holding;

import typeinfo.pets.*;
import java.util.*;
import static net.mindview.util.Print.*;
public class PetMap {
public static void main(String[] args) {
Map<String, Pet> petMap = new HashMap<String, Pet>();
petMap.put("My Cat", new Cat("Molly"));
petMap.put("My Dog", new Dog("Ginger"));
petMap.put("My Hamster", new Hamster("Bosco"));
print(petMap);
Pet dog = petMap.get("My Dog");
print(dog);
print(petMap.containsKey("My Dog"));
print(petMap.containsValue(dog));
}
}
/* Output:
{My Cat=Cat Molly, My Hamster=Hamster Bosco, My Dog=Dog Ginger}
Dog Ginger
true
true
3、存对象--List(容器) 对

     key=对象

     values=容器或另一个Maps.

   3.1 初始化问题:类变量存在类的常量池中,当类编译成.class 出现,但是编译器也不知道这些数据实际内存地址,只是弄一个假符号代替,

当这个类被用时(new、或者他的实例变量调用方法时),才为类变量分配真正的内存地址,这样常量池中假符号被真正的内               存地址代替,而且一个类的常量池谁都可以用,这个涉及到访问冲突问题,在线程中继续解释。

         1》MapOfList 有一个静态(类)变量:是一个实例变量 petPeople,可以和其它对象Map相连接。

          当用petPeople调用Map的方法时,这个keySet时,MapOfList 进行初始化,表示对MapOfList 类第一次使用

       2》首先初始化静态(类)petPeople 变量,

       3》第二static {} 块。

       4》才显示petPeople.keySet() 的所有值。

 

package holding;

import typeinfo.pets.*;
import java.util.*;
import static net.mindview.util.Print.*;
public class MapOfList {
public static Map<Person, List<? extends Pet>> petPeople =
 new HashMap<Person, List<? extends Pet>>();
      static {
      petPeople.put(new Person("Dawn"),
                          Arrays.asList(new Cymric("Molly"), new Mutt("Spot")));
     petPeople.put(new Person("Kate"),
                         Arrays.asList(new Cat("Shackleton"), new Cat("Elsie May"),
                                             new Dog("Margrett")));
    petPeople.put(new Person("Marilyn"),
                           Arrays.asList(new Pug("Louie aka Louis Snorkelstein Dupree"),
                                            new Cat("Stanford aka Stinky el Negro"), new Cat("Pinkola")));
     petPeople.put(new Person("Luke"),Arrays.asList(new Rat("Fuzzy"), new Rat("Fizzy")));
     petPeople.put(new Person("Isaac"), Arrays.asList(new Rat("Freckly")));
}
public static void main(String[] args) {
print("People: " + petPeople.keySet());
print("Pets: " + petPeople.values());
for (Person person : petPeople.keySet()) {
print(person + " has:");
for (Pet pet : petPeople.get(person))
print(" " + pet);
}
}
}


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值