查询表

1.Map接口
  Map接口定义的集合又称查找表,用于存储所谓"Key-Value"映射对。
    Key可以看成是Value的索引,作为Key的对象在集合中不可以重复。
  根据内部数据结构的不同,Map接口有多种实现类,
    其中常用的有内部为hash表实现的HashMap和内部为排序 二叉树实现的TreeMap。
2.put()方法
  Map接口中定义了向Map中存放元素的put方法:
    V put(K key,V value)
  将Key-Value对存入Map,如果在集合中已经包含该Key,则操作将替换该Key所对应的Value,
    返回值为该Key原来所对应的Value(如果没有则返回null)。
3.get()方法
  Map接口中定义了从Map中获取元素的get方法:
    V get(Object key)
  返回参数key所对应的Value对象,如果不存在则返回null.
4.containsKey()方法
  Map接口中定义了判断某个key是否在Map中存在:
    boolean containsKey(Object key);
    若Map中包含给定的key则返回true,否则返回false。
5.Hash表的原理 (如图)

6.hashCode方法
  从HashMap的原理中我们可以看到,key的hashCode()方法的返回值对HashMap存储元素时会起着很重要的作用。
    而hashCode()方法实际上是在Object中定义的。那么应当妥善重写该方法:
  对于重写了equals方法的对象,一般要妥善的重写继承自Object类的hashCode()方法
    (Object提供的hashCode方法将返回该对象所在内存地址的整数形式).
  重写hashCode方法是需要注意两点:
    其一、与equals方法的一致性,即equals比较返回true的两个对象其hashCode方法返回值应该相同;
    其二、hashCode返回的数值符合hash算法的要求,
    试想如果有很多对象的hashCode方法返回值都相同,则会大大降低hash表的效率,
    一般情况下可以使用IDE(如Eclipse)提供的工具自动生成hashCode方法。
7.装载因子及HashMap优化
  Capacity:容量,hash表里bucket(桶)的数量,也就是散列数组大小。
  Initial capacity:初始容量,创建hash表时,初始bucket的数量,默认构建容量是16,也可以使用特定容量。
  Size:大小,当前散列表中存储数据的数量。
  Load factor:加载因子,默认值0.75(就是75%),当向散列表增加数据时如果size/capacity的值大于Load factor则发生扩容并且重新散列(rehash)。
  性能优化:加载因子较小时,散列查找性能会提高,同时也浪费了散列桶空间容量。
    0.75是性能和空间相对平衡结果。在创建散列表时指定合理容量,减少rehash提高性能。
8.使用Keyset()方法
  Map提供了三种遍历方式:
    遍历所有的Key
    遍历所有的Key-Value对
    遍历所有的Value(不常用)
  遍历所有Key的方法
    Set<K> keySet()
    该方法会将当前Map中所有的key存入一个Set集合后返回。
9.使用entryset()方法
  遍历所有的键值对的方法:
    Set<Entry<K,V>> entrySet()
    该方法会将当前Map中每一组key-value对封装为一个Entry对象并存入一个Set集合后返回。
10.LinkedHashMap实现有序Map
  使用Map接口的哈希表和链表实现,具有可预知的迭代顺序。此实现与HashMap的不同之处在于:
    LinkedHashMap维护着一个双向循环链表。此链表定义了迭代顺序,该迭代顺序通常就是存放元素的顺序。
  需要注意的是,如果在Map中重新存入已有的key,那么key的位置不会发生改变,只是将value值替换。

时间: 2024-08-01 10:46:50

查询表的相关文章

查询表中数据的两种方法(select查)

1.通过点击按钮来执行查询表中数据.(数据库和表的创建不在详细介绍,请自动阅读数据库和表的创建) 第一种方法:直接使用SQL来操作数据库,调用execSQL(sql)语句 public class MainActivity extends AppCompatActivity { private Button mSelectButton; private MySqliteHelper mMySqliteHelper; private SQLiteDatabase db; @Override pro

mysql查询表的数据大小

在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量. 1.要查询表所占的容量,就是把表的数据和索引加起来就可以了 select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.tables where table_schema='数据库名'; 上面获取的结果是以字节为单位的,可以通过%1024在%1024的到M为单位的结果. 2.查询所有的

[MSSQL]如何高效查询表的总记录数

如何高效查询表的总记录数?[总结-整理-马克] 首先想到的自然是在表主键上应用COUNT函数来查询了,这个是目前使用最多的方法,没有之一 SELECT COUNT(1) ROWS FROM product 这里再给出一些其它方法,这些方法或多或少会有一些限制,或者看起来不是那么"完美",但依然有一定的借鉴意义,信息量不大,请客官慢用 另类方法1 充分利用系统自带的存储过程SP_SPACEUSED,详细的使用方式推荐谷哥或度娘,看代码 EXEC SP_SPACEUSED 'PRODUCT

数据字典生成工具之旅(8):SQL查询表的约束默认值等信息

上一篇代码生成工具里面已经用到了读取表结构的SQL,这篇将更加详细的介绍SQL SERVER常用的几张系统表和视图! 阅读目录 系统表视图介绍 实际应用 本章总结 工具源代码下载 学习使用 回到顶部 系统表视图介绍 1.sys.tables(用户表) SELECT name,object_id FROM sys.tables 上面SQL是用来查询数据库里面所有用户创建的表,name为表名,object_id为表的对象id.其中object_id的值也可以用系统函数OBJECT_ID()来取 SE

Oracle查询表主键、外键

项目中用到的一些Sql(oracle下的)总结: 1.查找表的所有索引(包括索引名,类型,构成列) 1 select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表 2.查找表的主键(包括名称,构成列) 1 select cu.* from user_c

SQL Server 2000中查询表名,列名及字段类型

经常碰到一些忘记表名称的情况,此时只记得个大概,此时可通过查询系统表Sysobjects找到所要的表名,如要查找包含用户的表名,可通过以下SQL语句实现, Select * From sysobjects Where name like '%user%' 如果知道列名,想查找包含有该列的表名,可加上系统表syscolumns来实现,如想查找列名中包含有user的所有表名,可通过以下SQL语句来实现 Select * From sysobjects s Where Exists( Select *

sql 查询表中所有字段的名称

最近工作用到SQL语句查询表中所有字段的名称,网上查询,发现不同数据库的查询方法不同,例如: SQL server 查询表的所有字段名称:Select name from syscolumns Where ID=OBJECT_ID('表名') Sqlite 查询表中所有字段名称: SELECT name FROM sqlite_master WHERE type=’table’ ORDER BY name; Oracle查看所有字段 select column_name from user_ta

sql server 查询表结构

--查询表结构start SELECT 序号 = a.colorder,字段名称 = a.name,字段描述 = f.value, 标识 = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity') = 1 then '√' else '' end, 主键 = case when exists(SELECT 1 FROM sysobjects where xtype = 'PK' and parent_obj = a.id and name in (

crm查询表的主字段信息

C#: public static void Query(IOrganizationService service) { //实体名称 string entityName = "new_sp"; RetrieveEntityRequest request = new RetrieveEntityRequest(); request.LogicalName = entityName; RetrieveEntityResponse response = (RetrieveEntityRes

atitit查询表修改表字段没反应--解锁锁定的表

查询表修改表字段没反应 要是使用gui 没反应,最好使用cmd 方式,不卉不个gui 锁上.. ALTER TABLE t_mb_awardweixin  MODIFY  awardChoiceNumLeft int(11) DEFAULT NULL #-----分析.. 1.首先,查询by另一个表格,  要是能查询,显示不是max conn的问题..也许表格锁定了.. 2. show full PROCESSLIST  要是看到个Waiting for table metadata lock