Java中怎样将逐个输入的数据保存到List 或者Hashtable中,表是多行多列的,如图所示:
数据保存在文本文件中如:
CODE NUM
0011 10
0024 5
0035 2
读取时:
Scanner scan = new Scanner(new FileInputStream("文件名"));
String[] columnNames = scan.nextLine().split(" ");
String line = null;
List> data = new LinkedList>();
while((line = scan.nextLine()) != null) {
String[] values = line.split(" ");
Map map = new HashMap();
for(int i = 0; i < columnNames.length(); i ++) {
map.put(columnNames[i], values[i]);
}
data.add(map);
}
java中hashtable怎样存储数据和读取数据
Hashtable-哈希表类\x0d\x0a\x0d\x0a以哈希表的形式存储数据,数据的形式是键值对.\x0d\x0a特点:\x0d\x0a查找速度快,遍历相对慢\x0d\x0a键值不能有空指针和重复数据\x0d\x0a\x0d\x0a创建\x0d\x0aHashtable ht=new \x0d\x0aHashtable();\x0d\x0a\x0d\x0a添值\x0d\x0a\x0d\x0aht.put(1,"Andy");\x0d\x0aht.put(2,"Bill");\x0d\x0aht.put(3,"Cindy");\x0d\x0aht.put(4,"Dell");\x0d\x0aht.put(5,"Felex");\x0d\x0aht.put(6,"Edinburg");\x0d\x0aht.put(7,"Green");\x0d\x0a\x0d\x0a取值\x0d\x0a\x0d\x0aString str=ht.get(1);\x0d\x0aSystem.out.println(str);// Andy\x0d\x0a\x0d\x0a对键进行遍历\x0d\x0a\x0d\x0aIterator it = ht.keySet().iterator();\x0d\x0a\x0d\x0awhile (it.hasNext()) {\x0d\x0a Integer key = (Integer)it.next();\x0d\x0a \x0d\x0aSystem.out.println(key);\x0d\x0a}\x0d\x0a\x0d\x0a对值进行遍历\x0d\x0a\x0d\x0aIterator it = ht.values().iterator();\x0d\x0a\x0d\x0awhile (it.hasNext()) {\x0d\x0a String value =(String) it.next();\x0d\x0a \x0d\x0aSystem.out.println(value);\x0d\x0a}\x0d\x0a\x0d\x0a取Hashtable记录数\x0d\x0a\x0d\x0aHashtable ht=new Hashtable();\x0d\x0a\x0d\x0aht.put(1,"Andy");\x0d\x0aht.put(2,"Bill");\x0d\x0aht.put(3,"Cindy");\x0d\x0aht.put(4,"Dell");\x0d\x0aht.put(5,"Felex");\x0d\x0aht.put(6,"Edinburg");\x0d\x0aht.put(7,"Green");\x0d\x0a\x0d\x0aint i=ht.size();// 7\x0d\x0a\x0d\x0a删除元素\x0d\x0a\x0d\x0aHashtable ht=new Hashtable();\x0d\x0a\x0d\x0aht.put(1,"Andy");\x0d\x0aht.put(2,"Bill");\x0d\x0aht.put(3,"Cindy");\x0d\x0aht.put(4,"Dell");\x0d\x0aht.put(5,"Felex");\x0d\x0aht.put(6,"Edinburg");\x0d\x0aht.put(7,"Green");\x0d\x0a\x0d\x0aht.remove(1);\x0d\x0aht.remove(2);\x0d\x0aht.remove(3);\x0d\x0aht.remove(4);\x0d\x0a\x0d\x0aSystem.out.println(ht.size());// 3\x0d\x0a\x0d\x0aIterator it = ht.values().iterator();\x0d\x0a\x0d\x0awhile (it.hasNext()) {\x0d\x0a // Get value\x0d\x0a String value =(String) \x0d\x0ait.next();\x0d\x0a System.out.println(value);\x0d\x0a}
hashtable和hashmap的区别是什么?
HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。HashMap存数据的过程是:HashMap内部维护了一个存储数据的Entry数组,HashMap采用链表解决冲突,每一个Entry本质上是一个单向链表。当准备添加一个key-value对时,首先通过hash(key)方法计算hash值。然后通过indexFor(hash,length)求该key-value对的存储位置,计算方法是先用hash&0x7FFFFFFF后,再对length取模,这就保证每一个key-value对都能存入HashMap中。当计算出的位置相同时,由于存入位置是一个链表,则把这个key-value对插入链表头。HashMap中key和value都允许为null。key为null的键值对永远都放在以table为头结点的链表中。
hashtable和hashmap的区别是什么?
1、继承的父类不同Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。2、线程安全性不同javadoc中关于hashMap的一段描述如下:此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步Hashtable 中的方法是Synchronize的。3、contains方法不同HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。4、key和value是否允许null值Hashtable中,key和value都不允许出现null值。但是如果在Hashtable中有类似put(null,null)的操作,编译同样可以通过,因为key和value都是Object类型,但运行时会抛出NullPointerException异常,这是JDK的规范规定的。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。5、两个遍历方式的内部实现上不同Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。