制作可以添加到非索引位置的列表的最佳方法是什么

时间:2014-03-01 17:29:29

标签: java list arraylist

如果您尝试

    List<Boolean> alist = new ArrayList<Boolean>();

    alist.add(5, true);     

您收到错误,因为您无法添加到列表中没有的索引。我能用什么来写:

any.add(73, true)

if any.get(52) {
  // Do something
}

只有列表中存储的内容为73时才会为true,否则为false。

3 个答案:

答案 0 :(得分:1)

使用自定义HashMap。使用相应的布尔值映射索引。

以下是此类自定义哈希映射的示例:

import java.util.HashMap;

public class IndexMap extends HashMap<Integer, Boolean>
{
  private static final long serialVersionUID = 7891095847767899453L;

  @Override
  public Boolean get(Object key)
  {
    if (containsKey(key))
      return super.get(key);
    return false;
  }
}

以下是这种地图的演示:

public class Demo
{
  public static void main(String[] args)
  {
    IndexMap map = new IndexMap();

    map.put(5, true);
    map.put(73, true);

    System.out.println(map.get(73)); // Prints true.
    System.out.println(map.get(52)); // Prints false.
  }
}

答案 1 :(得分:1)

看起来你实际上并没有对布尔值感兴趣,你只想检查一下是否输入了数字。如果是这种情况,HashSet可能是比HashMap更好的选择:

HashSet<Integer> hashSet = new HashSet<Integer>();

hashSet.add(4);
hashSet.add(100843);
hashSet.add(91);

System.out.println(hashSet.contains(4)); //true
System.out.println(hashSet.contains(10)); //false

答案 2 :(得分:0)

List维护元素的顺序,因此如果列表的大小小于特定索引,则不能以任何特定顺序添加元素。

element @ particular index addition <= list size

所以你可以移动到Map然后索引将元素和值的索引作为布尔值,即

Map<Integer,Boolean>