之前做项目打算用 Map<ArrayList,Integer> test = new TreeMap<ArrayList, Integer>() 这个TreeMap类型
然后发现调用put()函数的时候出错 原因是没有为这个TreeMap<ArrayList, Integer>() 类型设置比较器Compareable.
原因是TreeMap 是一颗有序树 因为基本类型string double interger 都有其自己的比较器 所以TreeMap中可以放这些类型
但是Arraylist类型本身没有比较器 所以TreeMap不能识别 必须为其定义一个构造器 代码如下.
构造变为:Map<ArrayList,Integer> test = new TreeMap<ArrayList, Integer>(new CompareIndex());
然后发现调用put()函数的时候出错 原因是没有为这个TreeMap<ArrayList, Integer>() 类型设置比较器Compareable.
原因是TreeMap 是一颗有序树 因为基本类型string double interger 都有其自己的比较器 所以TreeMap中可以放这些类型
但是Arraylist类型本身没有比较器 所以TreeMap不能识别 必须为其定义一个构造器 代码如下.
public class CompareIndex implements Comparator
{
@Override
public int compare(Object o1, Object o2)
{
ArrayList A = (ArrayList) o1;
ArrayList B = (ArrayList) o2;
for (int i = 0; i != A.size(); ++i)
{
if (A.get(i).getClass().toString().contains("String"))
{
String aStr = (String) A.get(i);
String bStr = (String) B.get(i);
if (aStr.compareTo(bStr) == 0)
continue;
else
return aStr.compareTo(bStr);
}
else if (A.get(i).getClass().toString().contains("Integer"))
{
Integer a = (Integer) A.get(i);
Integer b = (Integer) B.get(i);
if (a == b)
continue;
else
return a.compareTo(b);
}
else if (A.get(i).getClass().toString().contains("Double"))
{
Double a = (Double) A.get(i);
Double b = (Double) B.get(i);
if (a == b)
continue;
else
return a.compareTo(b);
}
}
return 0;
}
构造变为:Map<ArrayList,Integer> test = new TreeMap<ArrayList, Integer>(new CompareIndex());
我这里只添加了 String Integer Double三个类型的比较 可自行添加更多类型.