导航:首页 > 编程语言 > javamap接口

javamap接口

发布时间:2023-06-15 12:38:46

java map接口怎么用啊

使用注意:对于Map的使用,初始化应注意!

将Map装载进List当中,虽然循环多次赋值,并且每次赋值后的Map装载入List,但实际到最后时,List中所有的Map为同一键值,因此建议在循环内每次都New一个新的Map对象,但为了效率考虑,最好就Map的申明放在循环外做;

public List readExcel(String fileUrl, String fileName, int sheetNum,
String[] attribute, int startRow, int[] ignoreColumn) {

// 返回值
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
// 文件流
InputStream is = null;
// 读入文档的出错行号
int errorRow = 0;

try {
// 如果同一文档,则只产生一个实例
if (wb == null) {
is = new FileInputStream(fileUrl + "\\" + fileName);
wb = Workbook.getWorkbook(is);
is.close();
}
// 读入Sheet页
Sheet sheet = wb.getSheet(sheetNum);
// 行数
int rows = sheet.getRows();
// 根据每个Sheet页的字段数指定列数
int columns = attribute.length - 1 + ignoreColumn.length;
int countAttribute = 0;
// 打印信息
// System.out.print(sheet.getName() + " ");
// System.out.print("rows:" + rows);
// System.out.println(" columns" + columns);

// 逐行读入
// Map<String, String> map = new HashMap<String, String>();
Map<String, String> map;
boolean rowIsNull;
aaa: for (int i = startRow - 1; i < rows; i++) {

// 每次读入文档前,清空map
// map.clear();
map = new HashMap<String, String>();
// 当前Sheet页行数(指Excel行号)
errorRow = i + 1;

// 不为空列数计数值
int columnIsNotNullNum = 0;
// 一行数据中,必须有至少5列以上的数据,才认为该行为正常数据,否则退出
rowIsNull = true;
for (int k = 0; k < columns; k++) {
String rowContent = sheet.getCell(k, i).getContents();
if (rowContent != null && !rowContent.equals("")) {
++columnIsNotNullNum;
}
if (columnIsNotNullNum >= 5) {
rowIsNull = false;
break;
}
}
// 如果一行不超过5列有值,则跳出循环
if (rowIsNull)
break aaa;

// 逐列读值
bbb: for (int j = 0; j < columns; j++) {
for (int k = 0; k < ignoreColumn.length; k++)
// 不读忽略的列
if (j == ignoreColumn[k] - 1)
continue bbb;
// 取得单元格内容
String sbcContent = sheet.getCell(j, i).getContents();
// 全角转换为半角
String content = CommonUtil.sbcChange(sbcContent);
// 建立数据库字段键值映射关系
map.put(attribute[countAttribute], content.trim());
countAttribute++;
}
// 将文档名称入库
map.put(attribute[countAttribute], fileName);
result.add(map);
countAttribute = 0;
}
} catch (Exception e) {
wb.close();
try {
is.close();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
result = null;
System.out.println(CommonCode.ERR_READ_ROW + ":" + errorRow);
}

return result;

}

㈡ 为什么Java中Map接口的get函数参数竟然是Object

Map的get 和put 都是按照声明初始化的时候的泛型来的
Map<Object,Object> map = new HashMap<Object,Object>();
这样get的时候 , 参数就是Object , 返回值也是Object
如果不写泛型 , key 和 value 类型都是Object , 就是上边这样的情况 , 不过自己声明的话
一般是用String作为 key

㈢ java map 的用法

map是个接口

用都是用HasMap等实现Map接口的类

创建:Map<String,String> map = new HashMap<String,String>();
插入元素:map.put("1","a");
移除元素: map.remove("1");
清空: map.clear();

具体参照java API
java.uitl.HashMap

㈣ java中Map是什么意思,最重要的是怎么能用上

Map 正版翻译是查找表(你没看错,很蛋疼得翻译)

要用得话可以用他得实现类 HashMAP

Map<key ,value > a=new HashMap<key,value>();

map里面存得是一个个键值对,可以对键值对直接泛型,

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

a.put(key, value);

a.get(key) 得到value;

查找比较直接 很好用!

㈤ Java中List、Set、Map接口之间的区别和联系

List 用于遍历一个数组时效率最高;比如在循环显示所有信息时经常用到;
Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。 Map 就是键值对map(键,值),键是Sting 类型 值是Object (对象类型),所以在知道某条信息的一项时查询其他项就用该方法,效率最高!(以上个人见解!)
详细:数组和其它容器的区别主要有三方面:效率,类型,和保存基本类型的能力.在Java中,数组是一种效率很高的存储和随机访问对象引用序列的方式.数组是一 个简单的线性序列,因此访问速度很快,但也损失了其它一些特性.创建一个数组对象后,大小就固定了,如果空间不够,通常是再创建一个数组,然后把旧数组中 的所有引用移到新数组中.数组可可以保存基本类型,容器不行.
容器类不以具体的类型来处理对象,而是将所有的对象都以Object类型来处理,所以我们可以只创建一个容器,任意的Java对象都可以放进去.容器类可 以使用包装类(Integer,Double等),以便把基本类型放入其中. List Set Map 都可以自动调整容量,数组不能.

Collection表示一组对象,这些对象也称为collection的元素。一些 collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。JDK中不提供此接口的任何直接实 现,它提供更具体的子接口(如 Set 和 List)实现.

Map 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值.Map 接口提供三种collection视图,允许以键集、值集合或键值映射关系集的形式查看某个映射的内容。某些映射实现可明确保证其顺序,如 TreeMap(有序) 类;某些映射实现则不保证顺序,如 HashMap(无序) 类。Map可以像数组那样扩展成多维数组,只要把每个值也做成一个Map就行了.

Collection和Map是Java容器中的两种基本类型. 区别在于容器中每个位置保存的元素个数.Collection每个位置只能保存一个元素,包括List和Set.其中List以进入的顺序保存一组元素; 而Set中的元素不能重复.ArrayList是一种List,HashSet是一种Set,将元素添加入任意Collection都可以使用add() 方法.Map保存的是健值对.使用put()为Map添加元素,它需要一个健和一个值作参数.

ArrayList和LinkedList都实现了List接口,ArrayList底层由数组支持LinkedList由双向链表支持,因此,如果经常在表中插入或删除元素LinkedList比较适合,如果经常查询ArrayList比较适合.
Set的实现有TreeSet,HashSet,LinkedHashSet,HashSet查询速度最快,LinkedHashSet保持元素插入次序,TreeSet基于TreeMap,生成一个总是处于排序状态的Set.

Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet

Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“sychronized”的,这个也是Vector和ArrayList的唯一的区别。

ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看HashSet的add(Object obj)方法的实现就可以一目了然了。

public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}

这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。

LinkedHashSet:HashSet的一个子类,一个链表。

TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。

Set总结:

1. Set实现的基础是Map(HashMap);

2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;

http://user.qzone.qq.com/530536333/blog/1283866146

List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。

Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。

Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。

㈥ 为什么Java中Map接口的get函数参数竟然是Object

Collection<String> coll = map.values();
自己查values方法返回值是什么。

map接口的key-value映射关系中,key或value允许为null由具体实现决定。
put方法必须有个返回值,该返回值用来暗示map容器中是否已存在相同的key。
一般情况,如果key已存在,则替换旧的value并返回它,否则创建映射并返回null。
如果map实现允许value为null,那么put一个value为null的映射,再次put进相同key的映射,此时返回值必是null,无法得知是否已存在相同的key。相应了这句话“如果该实现支持 null 值,则返回 null 也可能表示此映射以前将 null 与 key 关联”。

阅读全文

与javamap接口相关的资料

热点内容
程序员女孩跳舞视频 浏览:554
linux默认java 浏览:426
如何看漫威漫画app 浏览:789
安卓手机如何按拼音排布app 浏览:721
java中exceptionin 浏览:882
java131 浏览:868
学英语不登录的app哪个最好 浏览:299
安卓的后台运行怎么设置 浏览:135
如何撰写论文摘要以及编译sci 浏览:416
安卓如何使用推特贴吧 浏览:429
怎样避免程序员入狱 浏览:856
苹果方块消除安卓叫什么 浏览:535
安卓世界征服者2怎么联机 浏览:297
国企招的程序员 浏览:969
哪个app可以看watch 浏览:518
dns备用什么服务器 浏览:1002
中达优控触摸屏编译失败 浏览:80
上海科纳压缩机 浏览:680
python工时系统 浏览:551
查好友ip命令 浏览:118