精华内容
下载资源
问答
  • Java 哈希表存取 批量创建 批量清空输入框 JTextField主要功能1.批量生成控件JButton JLabel JTextField; 2.使用哈希表存取控件的值; 3.批量清空输入框控件JTextField内容;完整源码//完整源码 import javax....

    Java 哈希表存取 批量创建 批量清空输入框 JTextField

    主要功能

    1.批量生成控件JButton JLabel JTextField;
    2.使用哈希表存取控件的值;
    3.批量清空输入框控件JTextField内容;

    完整源码

    //完整源码
    import javax.swing.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class TextFieldTest extends JFrame implements ActionListener{
        ArrayList<JButton> btnList = new ArrayList<JButton>();
        ArrayList<JLabel> lblList = new ArrayList<JLabel>();
        ArrayList<JTextField> tfList =new ArrayList<JTextField>();
        HashMap<String,String> hm = new HashMap<String,String>();
    
        TextFieldTest(){
            String k[] ={"1","2","3","4"};
            String v[] ={"a","b","c","d"};
            for(int i=0;i<4;i++){
                hm.put(k[i],v[i]);
                System.out.println("hm put "+i);
            }
    
            for(String key:hm.keySet()){
                JButton b = new JButton(key);
                btnList.add(b);
                System.out.println(" btnList add ");
            }
            for(String val:hm.values()){
                JLabel lb = new JLabel(val);
                lblList.add(lb);
            }   
    
            JFrame w = new JFrame();
            JPanel p = new JPanel();
            w.setSize(300,300);
    
            for(String val:hm.values()){
                JTextField tf = new JTextField(val);
                tfList.add(tf);
            }
    
            for(int i=0;i<4;i++){
                JPanel p2 = new JPanel();
                p2.setLayout(new GridLayout(3,1));
                p2.add((JButton) btnList.get(i));
                p2.add((JLabel) lblList.get(i));
                p2.add((JTextField) tfList.get(i));
                p.add(p2);
            }
            JButton btn = new JButton("CLEAR ALL TextField");
            btn.addActionListener(this);
            p.add(btn);
            w.add(p);
            w.setVisible(true);
    
        }
        public void actionPerformed(ActionEvent e){
            for(JTextField txt:tfList){
                txt.setText("   ");
            }
        }
        public static void main(String args[]){
            TextFieldTest t = new TextFieldTest();
        }
    
    }

    效果截图

    cmd javac TextFieldTest.java 以及java TextFieldTest 编译生成右边的窗体控件,见下图:

    批量创建控件

    点击按钮 CLEAR ALL TextField 清空所有输入框,效果如下:

    批量清空控件

    代码说明

    1.使用的控件包括:JButton JLabel 以及JTextField;
    2.使用哈希表HashMap来存放控件的值;
    3.JButton 部分, 如上图所示显示了一排“1”,“2”,“3”,“4”的小按钮:

    主要代码:
    ArrayList btnList = new ArrayList();

        for(String key:hm.keySet()){
            JButton b = new JButton(key);
            btnList.add(b);
            System.out.println(" btnList add ");
        }
    

    4.JLabel部分类似于JButton部分,见3;
    5.JTextField创建部分类似于JButton部分,见3;清空部分如下:

     ```
        ArrayList<JTextField> tfList =new ArrayList<JTextField>();
    
        public void actionPerformed(ActionEvent e){
        for(JTextField txt:tfList){
            txt.setText("   ");
        }   
    }
    
     ```
    

    心得

    因为自己的知识有限,不知道for(xx in OO){}这种语法是不是C#独创的,真的比较便利。

    展开全文
  • 哈希表的结构和特点 hashtable 散列表 查询非常快 结构有很多种 容易理解的顺序表+链表 主结构是顺序表,每个顺序表的节点再单独引出一个链表 哈希表添加数据 计算哈希码(调用hashCode(),结果是一个int值,...

    哈希表的结构和特点

    • hashtable 散列表
    • 查询非常快
    • 结构有很多种 容易理解的顺序表+链表
    • 主结构是顺序表,每个顺序表的节点再单独引出一个链表
      哈希表

    哈希表添加数据

    • 计算哈希码(调用hashCode(),结果是一个int值,整数的哈希码取自身即可)
    • 计算在哈希表中的存储位置y=k(x)=x%11 x:哈希码 k(x)函数 y:在哈希表中存储的位置
    • 存入
      • 一次添加成功
      • 多次添加成功(出现了冲突,调用equals)和对应链表的元素进行比较,比较到最后,结果都是false,创建新节点,存储数据,并加入链表)
      • 不添加(重复就不添加)
    • 添加数据快
    • 数据元素唯一
    • 数据无序
      在这里插入图片描述

    取数据
    先利用哈希函数计算,再在表中对应位置查找数据

    如何减少冲突

    • 哈希表的长度和表中的记录数的比例–装填因子
      • 如果Hash表的空间远远大于最后实际存储的记录个数,则造成了很大的空间的浪费
      • 如果选取小了,则容易造成冲突
      • 实际上,需要根据最终记录存储个数和关键字的分布特点来确定Hash表的大小
      • 另外可能事先不知道最终需要存储的记录个数,则需要动态维护hash表的容量,此时可能需要重新计算Hash地址
      • 装填因子 = 表中的记录数 / 哈希表长度
      • 如果装填因子越小,表明表中海域很多的空单元,则添加发生冲突的可能性越小
      • 而装填因子越大,则发生冲突的可能性就越大,在查找时所耗费的时间就越多
      • 有相关文献证明当装填因子在0.5左右的时候,Hash的性能能达到最优
      • 因此一般装填因子取0.5
    • 哈希函数的选择
      • 直接定址法 平方取中法 折叠法 除留取余法(y=x%11)
    • 处理冲突方法
      • 链地址法、开放地址发、再散列法、建立一个公共溢出区

    Java中TreeSet和TreeMap底层使用红黑树
    Java中HashSet和HashMap底层使用哈希表hashtable

    Set底层都是使用Map实现的

    • 在JDK8中有了一些变化,当链表的存储的数据个数大于等于8时,不采用链表存储,采用红黑树
    • 主要提高效率
      在这里插入图片描述
    展开全文
  • 如何存? 下标是根据key的hash值算出来的。当我们向Hashtable中Add元素时,元素储存在Hashtable的数组里的下标是根据添加key的hash值算出来的(但因为hash值取模数组长度,所以肯定不会超过当前数组长度)每个对象...
    • 如何存?
      • 下标是根据key的hash值算出来的。当我们向Hashtable中Add元素时,元素储存在Hashtable的数组里的下标是根据添加key的hash值算出来的(但因为hash值取模数组长度,所以肯定不会超过当前数组长度)
      • 每个对象算出的Hashcode并不是唯一的,有可能出现多个对象的Hashcode相同
      • 解决机制
        • 再Hash一次
        • 桶装模式,将两个相同的Hashcode的对象装入一个位置
      • 当新增时,Hashtable里的容器数组已经满了,则以数组的两倍扩容
    • 如何取?
      • 当我们从Hashtable里取元素时(根据key来取),会根据key的hash值算出要取的元素的下标,并比较元素里的key和当前要找的key参数的hash值是否相等,同时还要比较两个key的引用是否一致,如果都满足,则确定找到要取的元素
    展开全文
  • 哈希表概述

    2021-09-30 21:55:54
    哈希表概述 哈希值 万物都有哈希值 方法hashCode()就是返回一个对象的哈希值;这个方法属于Object类,Object类是万物的父类,...哈希表存取数据 假如有个Object对象要存入哈希表中: 刚开使用**Object.hashCode()**得到

    哈希表概述

    哈希值

    万物都有哈希值

    方法hashCode()就是返回一个对象的哈希值;这个方法属于Object类,Object类是万物的父类,所以也就是万物都有哈希值;

    hashCode()返回的是int类型的值;

    哈希表结构

    哈希表的结构是对象数组+链表+二叉树的形式;

    对象数组长度为16,元素下标为0-15,每个元素称之为哈希桶,也就是有16个哈希桶;

    每个哈希桶的结构是链表加二叉树的形式;

    哈希表存取数据

    假如有个Object对象要存入哈希表中:

    刚开使用**Object.hashCode()**得到一个int值的数据,然后int值%16(除16取余数),得到的值为多少,就存入对象数组对应下标的哈希桶中,并放在链表第一个位置,当又一个对象进入该哈希桶,该对象就放在链表第二个位置,以此类推;

    当一个哈希桶中存的对象大于8个时,链表就会自动变为二叉树的存储形式;

    当哈希桶中对象个数减少到6个时,二叉树又会变成链表结构;

    散列因子

    初始时对象数组长度为16;但是当散列因子>=0.75时,对象数组长度会扩容两倍;

    散列因子:就是目前存储了对象的哈希桶占目前所有哈希桶的比例,0.75就是指有75%的哈希桶存储了对象;

    当扩容到两倍时:下一次就是除以32取余了(如果之前是除16取余)


    HashMap存储数据:

    HashMap存储的是键值(K V)的数据;

    计算出K的哈希值,然后进行取余运算:(n-1) & hash:表示K的哈希值hash除以对象数组长度取余;

    当该哈希桶没有数据,就创建一个新节点存入该键值对;

    如果哈希桶已经有数据,就拿要存的数据的K和哈希桶里面的K一一比对,如果K一样,就用新的V覆盖旧V并返回旧V,如果K不一样则存存在最后的节点上;

    HashMap存数据流程如下:

    在这里插入图片描述


    Map集合下各子类存取方法

    其实不管是哪个子类,其存取方法都是一样的

    import java.util.*;
    public calss Demo{
        //Map
        //HashMap,Hashtable,ConcurrentHashMap
        //TreeMap
        //LinkedHashMap
        public static void main(String[] args) throws IOException{
            HashMap<String,String> data = new HashMap();
            //存数据
            data.put("key1","窗前明月光");
            data.put("key2","疑是地上霜");
            //取数据:有三种方法
            //通过get取出数据
            String vaule1 = data.get("key1");
            String vaule2 = data.get("key2");
            //遍历keySet集合
            Set<String> set = data.keySet();
            for(String key : set){
                System.out.println(data.get(key));
            //遍历values的Collection集合
                Collection<String> values = data.values();
                for(String value : values){
                    System.out.println(value);
                }
            }
        }
    }
    

    import java.util.*表示导入util下所有的包;

    Map集合下所有的子类都是以上的存取数据方法:

    如果是TreeMap,则要注意支持接口compareable;

    展开全文
  • 火山视窗redis数据库存取哈希表例程
  • Perl哈希表存取和常用函数(转)

    千次阅读 2010-11-23 15:21:00
    Perl哈希表存取和常用函数http://developer.51cto.com  2010-07-16 13:57 wunderup csdn.net 我要评论(0) Perl哈希表是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,...
  • 火山视窗Redis数据库存取哈希表操作 如果不会安装redis数据库的可以先看下面的这个博客: https://www.lkuaiy.com/ArticleForumInsidePage?id=16260789156448 一、首先肯定是要先配置redis数据库模块。 ...
  • 哈希表

    多人点赞 热门讨论 2021-02-18 11:56:46
    哈希表(Hash Table),又叫散列表,是能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构。也就是说,把关键字映射到一个表中的位置来直接访问记录,以加快访问速度。
  • Java哈希表及链式哈希表的实现

    千次阅读 2019-06-18 14:40:02
    哈希表也称为散列表,是用来存储群体对象的集合类结构。 什么是哈希表 数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系。当要查找一个对象时,只能以某种...
  • 数组也是有一定的缺点的,如果我们不知道某个元素的下标值,而只是知道该元素在数组中,这时我们想要获取该元素就只能对数组进行线性查找,即从头开始遍历,...所以,为了解决上述数组的不足之处,引入了哈希表的概念。
  • JAVA哈希表

    千次阅读 2021-03-08 18:47:52
    哈希表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素,因而必 须要在数据元素的存储位置和它的关键字(可用key表示)之间建立一个确定的对应关系,使每个关键字和散列表中一个唯一的存储...
  • 简单了解哈希表

    2019-03-24 17:20:28
    什么是哈希表 哈希表 是 Hash Table 一词的中文翻译,算法书里通常称这种数据结构为「散列表」。之所以称之为 散列表 和这种数据结构的存储方式有关,没个按序进入的数据都有可能散列在不同的位置,这是与数组、链表...
  • 什么是哈希表

    2019-10-09 09:24:08
    什么是哈希表 哈希表 是 Hash Table 一词的中文翻译,算法书里通常称这种数据结构为「散列表」。之所以称之为 散列表 和这种数据结构的存储方式有关,每个按序进入的数据经过 散列函数 的计算后会无序的分布在哈希表...
  • 数组 链表 哈希表

    千次阅读 2017-12-13 15:04:31
    数组 链表 哈希表
  • 哈希表HashTable

    2017-10-22 22:27:04
    哈希表概念哈希表(Hash Table),又称散列表,是字典结构的其中一种表达方式,可以根据数对的键值(Key value)映射到数组中的位置而对元素进行直接访问,时间复杂度为O(1)。其实现原理很简单,即使用一个哈希函数...
  • 哈希存取为何快?

    2016-09-04 12:25:49
    按这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。 那么关键字对应的记录存储位置我们称为散列地址。 整个散列过程其实就是两步。 (1) ...
  • 哈希表存取的是key-value键值对,通过哈希算法将key转化为一个整数,进而将value存储到以这个整数对数组长度取余后的结果为下标的数组空间里。这个数组就是我们所谓的哈希表。 装载因子loadFactor  决定填充容量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,656
精华内容 14,662
关键字:

哈希表存取