精华内容
下载资源
问答
  • java字典类_Java字典

    千次阅读 2020-07-19 17:34:52
    java字典类Java Dictionary is an abstract class. It was the parent class for any key-value mapping objects, such as Hashtable. However, it got deprecated in favor of the Map interface introduced in ...

    java字典类

    Java Dictionary is an abstract class. It was the parent class for any key-value mapping objects, such as Hashtable. However, it got deprecated in favor of the Map interface introduced in Java 1.2, which later on streamlined the Collections Framework. Dictionary doesn’t allow null for key and value.

    Java词典是一个抽象类 。 它是任何键值映射对象(例如Hashtable)的父类。 但是,不赞成使用Java 1.2中引入的Map接口,该接口后来简化了Collections Framework 。 字典不允许键和值为null。

    Note: Dictionary class has been obsolete and you shouldn’t use it. I use dictionary a lot in Python and got curious if there is a Dictionary class in Java? That’s how I got to know about the Dictionary class. The information provided here is just to have some idea about it if you are curious, try to avoid using it in your application.

    注意 :Dictionary类已经过时了,您不应使用它。 我在Python中经常使用字典,并且对Java中是否有Dictionary类感到好奇? 这就是我对Dictionary类的了解。 如果您感到好奇,这里提供的信息只是对它有所了解,请尝试避免在应用程序中使用它。

    Java字典方法 (Java Dictionary Methods)

    This class declares 7 methods, which the implementation classes had to implement.

    此类声明7个方法,实现类必须实现。

    1. int size(): returns the size of the dictionary.

      int size() :返回字典的大小。
    2. boolean isEmpty(): returns true if there are no key-value mappings, else false.

      boolean isEmpty() :如果没有键值映射,则返回true,否则返回false。
    3. Enumeration<K> keys(): returns the enumeration of the keys in the dictionary.

      Enumeration <K> keys() :返回字典中键的枚举。
    4. Enumeration<K> elements(): returns the enumeration of the values in the dictionary.

      Enumeration <K> elements() :返回字典中值的枚举。
    5. V get(Object key): returns the value associated with the key, if the key doesn’t exist then returns null.

      V get(Object key) :返回与键关联的值,如果键不存在,则返回null。
    6. V put(K key, V value): adds the key-value pair to the dictionary. If any of the key-value is null, then throws NullPointerException. If the key already exists, then the value associated is returned and then the new value is updated. If it’s a new key, then null is returned.

      V put(K key,V value) :将键值对添加到字典中。 如果任何键值为null,则抛出NullPointerException 。 如果键已经存在,则返回关联的值,然后更新新值。 如果是新密钥,则返回null。
    7. V remove(Object key): removes the key-value pair from the dictionary. The value associated with the key is returned. If the key doesn’t exist in the dictionary, then do nothing and null is returned.

      V remove(Object key) :从字典中删除键/值对。 返回与键关联的值。 如果键在字典中不存在,则不执行任何操作,并返回null。

    词典实现类 (Dictionary Implementation Classes)

    The only direct implementation of Dictionary is the Hashtable class. The Properties class extends Hashtable, so that is also an implementation of the Dictionary.

    Dictionary的唯一直接实现是Hashtable类。 Properties类扩展了Hashtable,因此它也是Dictionary的实现。

    Java字典初始化 (Java Dictionary Initialization)

    
    Dictionary<String, Integer> dict = new Hashtable<>();
    

    Dictionary support Generics, so we can specify the key-value types while declaring and instantiating the Dictionary object.

    Dictionary支持Generics ,因此我们可以在声明和实例化Dictionary对象时指定键值类型。

    带值的字典初始化 (Dictionary Initialization with Values)

    The Hashtable class has a constructor that accepts a Map and copy its key-pair to the Hashtable object. We can use it to initialize a dictionary with values.

    Hashtable类具有一个构造函数 ,该构造函数接受Map并将其密钥对复制到Hashtable对象。 我们可以使用它来初始化带有值的字典。

    
    Map<String, String> tempMap = new HashMap<>();
    tempMap.put("1", "One");
    
    Dictionary<String, String> dict1 = new Hashtable<>(tempMap);
    		
    System.out.println(dict1); // prints {1=One}
    

    Java字典与地图 (Java Dictionary vs Map)

    • Dictionary is an abstract class whereas Map is an interface.

      字典是一个抽象类,而地图是一个接口
    • Dictionary class has been deprecated when Collection classes were streamlined and Map got introduced in JDK 1.2

      在精简Collection类和在JDK 1.2中引入Map后,不推荐使用Dictionary类。
    • Don’t use Dictionary in your applications, it’s better to use Map.

      不要在应用程序中使用Dictionary,最好使用Map。

    Java字典vs哈希表 (Java Dictionary vs Hashtable)

    • Dictionary is an abstract class where as Hashtable is the implementation of Dictionary.

      Dictionary是一个抽象类,其中Hashtable是Dictionary的实现。
    • Dictionary class has been deprecated whereas Hashtable is still being used. In fact, Hashtable is part of Collections framework and implements Map interface.

      不推荐使用字典类,而仍在使用Hashtable。 实际上,Hashtable是Collections框架的一部分,并实现Map接口。

    如何检查字典中是否存在键 (How to Check if a Key Exists in Dictionary)

    Here is a simple program where we are iterating over the enumeration of keys to check if the key exists in the dictionary or not.

    这是一个简单的程序,我们在其中遍历键的枚举,以检查键是否存在于字典中。

    
    Dictionary<String, String> dict = new Hashtable<>();
    dict.put("1", "One");
    dict.put("2", "Two");
    dict.put("3", "Three");
    
    Enumeration<String> keys = dict.keys();
    
    boolean found = false;
    String lookupKey = "2";
    while (keys.hasMoreElements()) {
    	String key = keys.nextElement();
    	if (lookupKey.contentEquals(key)) {
    		found = true;
    		System.out.println(lookupKey + " is present in the dictionary.");
    		break;
    	}
    }
    if (!found)
    	System.out.println(lookupKey + " is not present in the dictionary.");
    

    We can also use the get() method to check if the key exists or not. If key doesn’t exists, then null is returned. Also, null values are not allowed, so it’s safe to use the null check for this.

    我们还可以使用get()方法检查密钥是否存在。 如果键不存在,则返回null。 另外,不允许使用null值,因此使用null检查是安全的。

    
    String value = dict.get(lookupKey);
    
    if(value != null)
    	System.out.println(lookupKey + " is present in the dictionary.");
    else
    	System.out.println(lookupKey + " is not present in the dictionary.");
    
    

    结论 (Conclusion)

    Dictionary is an obsolete class, so you shouldn’t use it in your application. You might be tempted to use it if you are coming from Python background, but avoid it and use Map and their implementation classes.

    字典是一个过时的类,因此您不应在应用程序中使用它。 如果您来自Python背景,则可能会想使用它,但请避免使用它,并使用Map及其实现类。

    翻译自: https://www.journaldev.com/39818/java-dictionary-class

    java字典类

    展开全文
  • Java 字典

    千次阅读 2019-01-06 21:35:00
    字典 Map 存键值对  / \ HashMap <K,V> LinkedHashMap<K,V> 数组+链表 数组+双链表(有序) 自定义键对象(不能重)需要重写键的hashCode()方法、equals()方法。 Map import java.util.Map; ...

        字典 Map  存键值对

        /       \

    HashMap <K,V>   LinkedHashMap<K,V>

    数组+链表        数组+双链表(有序)

    自定义键对象(不能重)需要重写键的hashCode()方法、equals()方法。

    Map

    import java.util.Map;

    import java.util.Set;

    public class Demo01 {

    public static void main(String[] args) {

    Map<String,String> map=new HashMap<String,String>();

    map.put("a","12"); //添加

    map.put("b","1");

    map.put("a","2");//覆盖a的值

    System.out.println(map);//{a=2,b=1} 无顺序

     

    //String v=map.remove("b");//删除键的值 返回

    //System.out.println(v);

    System.out.println(map.get("a"));//取值  没有返回null

    // 通过keyset遍历map 增强for

    // Map不能直接用 迭代器/增强for 遍历 需要转Set才能用

    Set<String> keys=map.keySet();   // 返回集合中所有键

    for(String key:keys){

    String value=map.get(key);   // 获取键的值

    System.out.println(key+"..."+value);

    }

    //通过Iterater

    Set<String> keys2=map.keySet();

    Iterator<String> it=keys2.iterator();

    while(it.hasNext()){

    String key=it.next();

    String value=map.get(key);

    System.out.println(key+"..."+value));

    }

    //增强for + entrySet方法(键值对对象)

    Set<Map.Entry<String,String>> entrys=map.entrySet();

    for(Map.Entry<String,String> entry:entrys){

    String key=entry.getKey();

    String value=entry.getValue();

    System.out.println(key+"..."+value);

    }

    //Iterater遍历

    Set<Map.Entry<String,String>> entrys2=map.entrySet();

    Iterator<Map.Entry<String,String>> it2=entrys.iterator();

    while(it2.hasNext()){

    Map.Entry<String,String> entry2=it2.next();

    String key2=entry2.getKey();

    String value2=entry2.getValue();

    System.out.println(key2+"..."+value2);

    }

    }

    }

    Map<Student,String> map = new HashMap<Student,String>();//键内容不重

    map.put(new Student("lisi",28), "上海");// Student重写HashCode()equals()

    多层字典

    HashMap<String,HashMap<String,Person>> oracle

      =new HashMap<String,HashMap<String,Person>>();

     

    HashMap<String,Person> java0601=new HashMap<String,Person>();

    java0601.put("001", new Person("小红帽",18));

    java0601.put("002", new Person("小丸子",20));

    HashMap<String,Person> java0929=new HashMap<String,Person>();

    java0929.put("001", new Person("张超",22));

    java0929.put("002", new Person("赵玉仙",21));

     

    oracle.put("java0601", java0601);

    oracle.put("java0929", java0929);

     

    //遍历  增强for+keyset

    Set<String> classes=oracle.keySet();//所有键 集合   班级名字集合

    for(String clas:classes){

    HashMap<String,Person> c=oracle.get(clas);//获取班级集合 值

    Set<String> stunumbers=c.keySet();  // 人名集合 键

    for(String num:stunumbers){

    Person p=c.get(num); //人名集合 值

    System.out.println("班级"+clas+"学号"+num+"学生"+p);

    }

    }

     

     

    斗地主 发牌 例子

     

    public static void main(String[] args) {
        //准备容器                                    //牌序  牌值
        HashMap<Integer,String> pookerMap=new HashMap<Integer,String>();
        ArrayList<Integer> pookerNumer=new ArrayList<Integer>();   //牌序
        //准备牌
        String[] number={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        String[] color={"♥","♦","♣","♠"};
        int index=2;
        for(String num:number){
            for(String col:color){
                pookerMap.put(index, col+num);//向Map中添加  牌序:牌值
                pookerNumer.add(index);   //向ArrayList添加  牌序号
                index++;
            }
        }
        //添加大小王
        pookerMap.put(0,"大王");    pookerNumer.add(0);
        pookerMap.put(1,"小王");    pookerNumer.add(1);
        System.out.println(pookerMap);
        //洗牌、发牌
        Collections.shuffle(pookerNumer);  //打乱  ArrayList 牌序号
        ArrayList<Integer> player1=new ArrayList<Integer>();
        ArrayList<Integer> player2=new ArrayList<Integer>();
        ArrayList<Integer> player3=new ArrayList<Integer>();
        ArrayList<Integer> bottom=new ArrayList<Integer>();
        
        for(int i=0;i<pookerNumer.size();i++){  //分发  牌序号
            if(i<3){bottom.add(pookerNumer.get(i));} // 前三个序号 添加 底牌
            else if(i%3==0){player1.add(pookerNumer.get(i));}
            else if(i%3==1){ player2.add(pookerNumer.get(i));}
          else if(i%3==2){ player3.add(pookerNumer.get(i)); }
        }    
        //对三个玩家的牌 排序
        Collections.sort(player1);    Collections.sort(player2);
        Collections.sort(player3);    Collections.sort(bottom);    
        //看牌
        lookPooker("玩家1",player1,pookerMap);// 名称  牌序号  字典
        lookPooker("玩家2",player2,pookerMap);
        lookPooker("玩家3",player3,pookerMap);
        lookPooker("底牌",bottom,pookerMap);
    }
    
    public static void lookPooker(String name,ArrayList<Integer> player,HashMap<Integer,String> pookerMap){
        System.out.println(name+": ");
        for(int index:player){
            System.out.print(pookerMap.get(index)+" ");// 对应字典 找出 牌序号的 值
        }
        System.out.println();
    }

     

    转载于:https://www.cnblogs.com/javscr/p/10230464.html

    展开全文
  • Java字典树(Trie)数据结构 数据结构计算机编程中的关键内容,了解什么时候使用以及为什么使用是非常重要的。本文介绍字典树(Trie,发音try)数据结构,理解其实现并分析其复杂度。 1. 字典树(Trie) 字典树不是很知名,...

    Java字典树(Trie)数据结构

    数据结构计算机编程中的关键内容,了解什么时候使用以及为什么使用是非常重要的。本文介绍字典树(Trie,发音try)数据结构,理解其实现并分析其复杂度。

    1. 字典树(Trie)

    字典树不是很知名,一般课程中提及不多,但不代表其不重要。有时也称为基数树和前缀树(因为能根据前缀进行搜索),它是基于树的数据结构,节点存储的字符(通常为字符串中的字符),通过向下遍历树的分支路径可以获得单词或字符串。

    节点在树中的位置定义了与该节点相关联的键,这与二叉搜索树不同,二叉搜索树中节点存储的键只对应于该节点。节点所有后代具有相同的前缀,根节点关联空字符串。

    首先看TrieNode节点类的实现:

    import java.util.HashMap;
    import java.util.Map;
    
    class TrieNode {
        private final Map<Character, TrieNode> children = new HashMap<>();
        private boolean endOfWord;
    
        Map<Character, TrieNode> getChildren() {
            return children;
        }
    
        boolean isEndOfWord() {
            return endOfWord;
        }
    
        void setEndOfWord(boolean endOfWord) {
            this.endOfWord = endOfWord;
        }
    }
    

    有可能字典树是二叉搜索树,但一般情况下两种是不同的。两种都为树,但二叉搜索数总是有两个节点,而字典树可能有多个节点(如果存储英文单词,最多有26个节点)。
    字典树(除了根节点)存储一个字符或数字。通过从根节点开始向下遍历至特定节点n,能获得字符串或数字的相同前缀,即分支所共享的前缀。

    如果从一个叶子节点向上遍历至根节点,则可以获得一个字符串或数字序列。下面请看Trie类的实现:

    public class Trie {
        private TrieNode root;
    
        Trie() {
            root = new TrieNode();
        }
    }
    

    2. 字典树操作

    下面讨论字典树的基本操作。

    2.1. 插入元素

    在描述插入新节点之前,先理解其算法:

    1. 设置当前节点为根节点
    2. 取单词的第一个字母作为当前字母
    3. 如果当前节点已经存在当前字母的引用(查找当前节点的所有子元素),那么设置当前节点为该引用的节点。否则创建一个新的节点,设置该字母为当前字母并初始化当前节点为新的节点。
    4. 重复第三步直到字符串遍历完成。

    该操作的时间复杂度为O(n),n表示字符串长度。实现如下:

    public void insert(String word) {
        TrieNode current = root;
     
        for (int i = 0; i < word.length(); i++) {
            current = current.getChildren()
              .computeIfAbsent(word.charAt(i), c -> new TrieNode());
        }
        current.setEndOfWord(true);
    }
    

    现在我们看看如何使用该方法插入元素:

    private Trie createExampleTrie() {
        Trie trie = new Trie();
     
        trie.insert("Programming");
        trie.insert("is");
        trie.insert("a");
        trie.insert("way");
        trie.insert("of");
        trie.insert("life");
     
        return trie;
    }
    

    通过下面测试代码可以测试字典树是否为空:

    @Test
    public void givenATrie_WhenAddingElements_ThenTrieNotEmpty() {
        Trie trie = createTrie();
     
        assertFalse(trie.isEmpty());
    }
    

    2.2. 查找元素

    现在考虑实现查找方法实现:

    1. 获得根节点子节点
    2. 迭代字符串的每个字符
    3. 检查当前字符是否为字典子树的一部分,如果一直查询不到,停止返回false。
    4. 重复2、3两步,直到遍历完字符串所有字符。如果到达最后字符串返回true。

    算法复杂度为O(n),n为字符串长度。Java代码实现:

        boolean containsNode(String word) {
            TrieNode current = root;
    
            for (int i = 0; i < word.length(); i++) {
                char ch = word.charAt(i);
                TrieNode node = current.getChildren().get(ch);
                if (node == null) {
                    return false;
                }
                current = node;
            }
            return current.isEndOfWord();
        }
    

    测试代码:

    @Test
    public void givenATrie_WhenAddingElements_ThenTrieContainsThoseElements() {
        Trie trie = createExampleTrie();
     
        assertFalse(trie.containsNode("3"));
        assertFalse(trie.containsNode("vida"));
        assertTrue(trie.containsNode("life"));
    }
    

    2.3. 删除元素

    除了插入、查找元素,显然还需要能够删除元素。
    对于删除过程,需要下面两个步骤:

    1. 检查元素是否为字典树的一部分
    2. 如果是则从字典树中删除

    时间复杂度为O(n),n表示字符串长度。java实现:

    public void delete(String word) {
        delete(root, word, 0);
    }
     
    private boolean delete(TrieNode current, String word, int index) {
        if (index == word.length()) {
            if (!current.isEndOfWord()) {
                return false;
            }
            current.setEndOfWord(false);
            return current.getChildren().isEmpty();
        }
        char ch = word.charAt(index);
        TrieNode node = current.getChildren().get(ch);
        if (node == null) {
            return false;
        }
        boolean shouldDeleteCurrentNode = delete(node, word, index + 1) && !node.isEndOfWord();
     
        if (shouldDeleteCurrentNode) {
            current.getChildren().remove(ch);
            return current.getChildren().isEmpty();
        }
        return false;
    }
    

    测试代码:

    @Test
    void whenDeletingElements_ThenTreeDoesNotContainThoseElements() {
        Trie trie = createTrie();
     
        assertTrue(trie.containsNode("Programming"));
      
        trie.delete("Programming");
        assertFalse(trie.containsNode("Programming"));
    }
    

    3. 总结

    本文介绍字典树数据结构以及其常用的操作和实现。

    展开全文
  • java 字典(Dictionary)类

    万次阅读 2018-11-07 13:07:49
    字典定义的抽象方法如下表所示: 方法 描述 枚举元素() 返回此词典中值的枚举 对象get(对象键) 返回此词典中该键所映射到的值 boolean isEmpty() 测试此词典是否不存在从键到值的映射 ...

    Dictionary类是一个抽象类,用来存储键/值对,作用和Map类相似

    字典定义的抽象方法如下表所示:

    方法描述
    枚举元素()返回此词典中值的枚举
    对象get(对象键)返回此词典中该键所映射到的值
    boolean isEmpty()测试此词典是否不存在从键到值的映射
    枚举键()返回此词典中的键的枚举
    对象放置(对象键,对象值)将指定键映射到此词典中指定值
    对象删除(对象键)从此词典中移除key(及其相应的价值)
    int size()返回此词典中条目(不同键)的数量

     

    展开全文
  • 524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。...
  • JAVA字典树:以及算法的改进;

    千次阅读 2018-04-25 13:04:11
    为什么需要用到字典树算法: 当我们需要对一些需要的过滤的文本内容进行筛选时,最简单的方法就是逐个查找,需要过滤一个关键字时,也许不是很麻烦,但是当我们需要过滤很多关键字,并且过滤的文本很大时,逐个查找...
  • Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题).pdf
  • dictionary 字典(相当于java字典)

    千次阅读 2017-01-15 15:00:54
    #dictionary 字典(相当于java字典) #大括号包含,key-value 形式 # 列表 a_list = [1,3,5,7,9] d = {"apple":1,"pear":2,"orange":3,0:"马化腾"} d2 = {3:"apple",1:"pear",2:"orange"} print(d["pear"],d2...
  • java实现一个小字典

    2018-12-20 12:22:29
    public void run() { // TODO Auto-generated method stub if(Thread.currentThread() == scrollWordsThread){ //如果当前正在运行中的线程是scrollWordsThread while(true){ int x = labelOfScrollWords....
  • 给定一个含N给单词的字典和一个主词,找出字典中可通过删除给定主词某些字符而形成的单词。 编写一个算法,查找字典中可通过删除给定主词某些字符而形成的单词,并按照字典中的单词顺序排列 示例 输入:mWord=...
  • 基于Java链表实现的字典树(trie),实现了增删改查等功能,它说摘要必须大于50字我还能说啥啥啥啥
  • 字典树(java实现)

    千次阅读 2018-07-21 22:02:22
    一、什么是java字典树? Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它...
  • JAVA list 列表 字典 dict

    2019-03-09 21:33:00
    import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; public class list_map { //列表的使用方法 public static void list_test(){ ArrayL...
  • 简单字典 简要说明:您需要安装一个迷你词典程序,该程序允许用户查找单词、添加新词条/含义、删除词条和保存编辑。 字典数据放在一个文本文件中,并在程序开始运行时加载。 程序运行在DOS命令窗口,用户使用键盘...
  • 字典删除元素

    千次阅读 2019-12-30 10:42:02
    有没有办法从Python中删除字典中的项目? 另外,如何从字典删除项目以返回副本(即,不修改原始文件)?
  • 比如Python中创建数组、集合、字典的时候,直接用“变量名=[]/{}/set()…”的方式就行了,而在Java用到数组得new出一个数组对象或者使用容器类,不能像Python那样简单创建出来就行了。 数组 1.Java下创建数组,最...
  • Trie(字典树)的Java实现

    千次阅读 2017-08-04 13:14:55
    Trie(字典树,单词查找树)的java实现。
  • 字典管理 从FreeCMS 2.3开始支持 字典分类管理 从左侧管理菜单点击字典分类进入。 a.添加 点击“添加”按钮 输入相关属性后点击“确定”即可。 b.编辑 选择分类,点击“编辑”按钮 输入相关属性后...
  • 可以获取某个数据字典的数据 2.我对dictData这个List进行删除最后一个元素的操作 remove(); 3.当我再次通过DictUtils.getDictList("xxx");获取数据的时候发现dictData是被删除后的。 4.通过源码发现...
  • 数据字典 描述:每行双击可打开内层抽屉 架构:前后端分离 前台框架:elementUi、Vue 后台框架:springboot、ssm 项目管理工具:maven 代码管理工具:git 前端代码如下: <template> <section> <!-...
  • 编程字典-Java(JavaEE)学习线路图

    千次阅读 多人点赞 2018-11-30 22:10:21
    Java学习线路图 Java教程 Java 教程 Java 简介 Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java变量类型 Java修饰符 Java运算符 Java循环结构 Java分支结构 Java Number类 Java ...
  • java语言实现IP地址字典字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。...
  • Java编程基础(3)——字典类型

    万次阅读 2018-06-14 09:09:22
    今天,要用到字典类型,所以就查了了一下,直接上源码:Individual indiv = new Individual(); //Individual是一个类,自己创建的,这里就不写具体内容了,只是想说以下,value值可以是任何类型 indiv.Fitness = 111...
  • 原文地址:... ... ...字典管理 从FreeCMS 2.3开始支持 字典分类管理 从左侧管理菜单点击字典分类进入。 a.添加 点击“添加”按钮 输入相关属性后点击
  • 原文地址:... ... 字典管理 从FreeCMS 2.3开始支持 字典分类管理 从左侧管理菜单点击字典分类进入。 a.添加 点击“添加”按钮 输入相关属性后点击“确定

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,012
精华内容 25,204
关键字:

java字典删除

java 订阅