java map存储的是键顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java map存储的是键顺序相关的知识,希望对你有一定的参考价值。
我想添加一些数据到map 中, 比如键名为x,1,4,2,z,O
那么我遍历输出的顺序也应该是x,1,4,2,z,O
应该用哪个的?我用的是 treemap不过发现遍历后,会自动按自然顺序扁平
如果楼主想通过循环取值,建议不要用map了,这和map的初衷不符。楼主可以用List来实现。 参考技术B public static void main(String[] args)
//使用Map声明对象。
Map<Integer, String> treemap = new TreeMap<Integer, String>();
treemap.put(1,"x");
treemap.put(2,"1");
treemap.put(3,"4");
treemap.put(4,"2");
treemap.put(5,"z");
treemap.put(6,"O");
Set<Integer> keySet = treemap.keySet(); //得到key set
System.out.println("列出所有值:");
//循环 输出各个key set对应的值
for (Integer key : keySet )
System.out.print(treemap.get(key)+" ");
遍历输出的值还是原来顺序,不会改变顺序的。
希望对你有所帮助! 参考技术C 看这个 如何让 Map 中的值按放入顺序输出 http://unmi.cc/map-sorted-output-by-input 参考技术D java.util.TreeMap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文则会出现问题,需要自己写排序规则。
比较器需要实现java.text.Collator类,例如:
package cn.tjopen.mediaman.util;
import java.text.CollationKey;
import java.text.Collator;
public class CollatorComparator extends Collator
private Collator collator = Collator.getInstance();
private int sort=1;
@Override
public int compare(String arg0, String arg1)
CollationKey key1 = collator.getCollationKey(arg0);
CollationKey key2 = collator.getCollationKey(arg1);
return sort*key1.compareTo(key2);
/**
* 设定排序的方向
* @param i 排序方向(正数:正序;负数:倒序)
*/
public void setSort(int i)
if(i>0)
sort=1;
else if(i<0)
sort=-1;
@Override
public CollationKey getCollationKey(String arg0)
// TODO Auto-generated method stub
return null;
@Override
public int hashCode()
// TODO Auto-generated method stub
return 0;
比较器的使用:
int sort = 1;//>0正序<0倒叙
CollatorComparator comparator = new CollatorComparator();
comparator.setSort(sort);
Map map = new TreeMap(comparator);
然后在把要排序的字段作为key,相应的信息作为对应的value,即可实现排序
注意:key值不能重复,如果排序字段有重复,则需要进行处理。
例如:方法一:在向map中存放数据时,先判断要放的key是否已存在,如果存在在当前值后面加一区分标记
方法二:如果信息中有不可能重复的字段,在排序字段后面加上这个不重复的字段值,把这个组合当做key
list和map集合
List特点:元素有放入顺序,元素可重复
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
Map特点:元素按键值对存储,无放入顺序 (应该知道什么是键值对吧!)
List接口有三个实现类:LinkedList,ArrayList,Vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)
Query接口有一个实现类:LinkList
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap
HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null
SortedMap有一个实现类:TreeMap
其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对
set 一般无序不重复.map kv 结构 list 有序
以上是关于java map存储的是键顺序的主要内容,如果未能解决你的问题,请参考以下文章