地图接口实现类_ Java常用工具类详细描述

Դ腾讯新闻

ߣ搜索引擎优化

10

2021-11-06 14:10:42

java中的map接口与python中的map函数完全不同。虽然都有映射关系,但是java的map接口更接近字典和集合两种引用数据类型。这个接口是一个双列集合,其元素由键和值组成,即键和值。这个接口有两个实现类:hashmap和treemap。Hashmap在内部维护一个散列顺序,所以它与我们在宏中看到的顺序不太一样。下面的示例遍历该集合中的所有值。

map接口的实现类(详解java常用工具类)

公共类示例18 {

公共静态void main(String[]args){ 0

//直接获取地图中的值。

//map中存储的值是集合集合。

map map=new HashMap();

map.put('1 ',' JavaScript ');

map.put('2 ',' Linux ');

map.put('3 ',' Unix ');

集合值=map . values();//取出地图对象中的值,转换成集合类。

iterator it=values . iterator();

while(it . HasNeXt()){ 0

对象值=it . next();

System.out.println(值);

}

}

}

这里,映射中的所有元素都通过java迭代器进行迭代。这里的get方法是根据输入键返回相应的值。此处不允许重复元素。如果输入相同的键值对,将被视为对键值对应值的修改。也就是下面的例子:

map.put('3 ',' MacOS ');

也就是说,修改了键3的值。简而言之,键是相同的,值是修改的。

很多初学者不适应hashmap中的读取顺序不是按照存储顺序读出的,所以总想按照宏顺序读出。我们可以使用LinkedHashMap类来实现这个目标。它使用双向链表来维护内部元素的关系,就像链表一样。以下示例:

公共类示例19 {

公共静态void main(String[]args){ 0

//如果要使map对象中存储的值与读取的值一致,则需要使用linkedhashmap类。

//内部维护双向链表。

map map=new LinkedHashMap();//利用linkedhashmap类,实现存储和读取顺序的一致性。

map.put('1 ',' Ubuntu ');

map.put('2 ',' CentOS ');

map.put('3 ',' SunOS ');

map.put('4 ',' MacOS ');

set KeySet=map . KeySet();//取出地图对象中的一组关键点。

iterator it=KeySet . iterator();//为什么键集调用迭代器?因为它取出密钥并将其存储在keySet对象中。

while(it . HasNeXt()){ 0

object key=it . next();

object value=map . get(key);

System.out.println(键' : '值);

}

}

}

这样,读取和存储的顺序是一致的。

map接口的实现类(详解java常用工具类)

Treap集也用于存储键值对的映射关系,不允许重复键。Treap集合的内部是通过二叉树原理实现的,因此密钥是不可复制的。它由一个根组成,根分为两个子树,一个左子树和一个右子树。左边的子树总是比右边的子树小。

公共静态void main(String[]args){ 0

//TreeMap集合

//密钥唯一性由二叉树原理保证。树形图是按照一定的顺序排列的

TreeMap tmap=new TreeMap();

tmap.put("1","java"); tmap.put("2","Linux"); tmap.put("3","MacOS"); tmap.put("4","Ubuntu"); Set keyset = tmap.keySet(); Iterator ior = keyset.iterator(); while (ior.hasNext()){ Object key = ior.next(); Object value = tmap.get(key); System.out.println(key+":"+value); } }

它读取的元素的顺序和存储的顺序一致。因为编号是String类型,String类型实现了Comparable接口,因此默认会按照自然顺序进行排序。

当使用TreeMap集合时,也可以自定义比较法。下面的例子就实现了自定义比较器。

public class Example21 {
    public static void main(String[] args) {
        /*
        * 实现自定义比较器,与二叉树集合默认排序规则相反的排序
        * */
        TreeMap tm = new TreeMap(new MyComparator());
        tm.put("1","JavaScript");
        tm.put("2","java虚拟机");
        tm.put("3","Linux Kernel");
        Set keySet = tm.keySet();
        Iterator it = keySet.iterator();
        while (it.hasNext()){
            Object key = it.next();
            Object value = tm.get(key);//获得键对应的值
            System.out.println(key+":"+value);
        }
    }
}
//实现自定义比较器
class MyComparator implements Comparator {
    public int compare(Object obj1,Object obj2){
        String id1 = (String) obj1; //把obj1强制转换为String类型
        String id2 = (String) obj2;
        return id2.compareTo(id1);//把比较结果返回
    }
}

jdk帮我们预留了一个接口叫Comparator,我们使用implements实现这个接口。因为在java里所有的类的父类都是Object是默认继承的。所以在集合中的数据类型都转成Object类型。那么我们要做的就是把Object类型转译成String类型。然后使用compareTo方法进行比较,这样就实现了字典逆序。

Properties集合是map接口的一个实现类Hashtable与hashMap相似,hashtable的线程是安全的,存取元素时速度慢。Properties主要存储字符串类型的键和值。

public static void main(String[] args) {
        //Properties集合是map接口的一个实现类Hashtable与hashMap相似。
        //hashtable的线程是安全的,存取元素时速度慢。
        //Properties主要存储字符串类型的键和值
        //按顺序存储的顺序读取结果
        Properties p = new Properties();
        p.setProperty("1","C");//写入Properties集合
        p.setProperty("2","JavaScript");
        p.setProperty("3","Node.js");
        /*
        * 通过调用propertyNames方法获得一个包含所有键的Enumeration对象,
        * 在遍历时调用getProperty方法获取值
        *
        * */
        Enumeration names = p.propertyNames();//获取Enumeration对象所有键的枚举
        while (names.hasMoreElements()){
            String key = (String) names.nextElement();
            String value = (String) p.getProperty(key);//获取键对应的值
            System.out.println(key+":"+value);
        }
    }

主要用于编写配置项的,这个我在学Spring Boot这么课的时候经常使用。它有getproperty()和setproperty()这两个方法,用于读写配置。再详细的就在代码里写的很完备了,直接看代码就可以了。

佭ϴý Ѷ Media8ý

在线客服

外链咨询

扫码加我微信

微信:juxia_com

返回顶部