Java Fast包含和后进先出数据结构

Java Fast包含和后进先出数据结构,java,Java,我正在寻找一个java中的数据结构,它有一个fast contains方法,但可能需要某种排序,因为我需要能够添加到它并从中获取,但我希望它像一个具有LIFO功能的堆栈。这可能吗?我想到了一个HashSet,它有快速包含但没有保证顺序,还有一个LinkedList,它有保证顺序但有慢速包含。Hmm,如果需要执行后进先出堆栈操作,则无法对集合进行排序,因为这样会丢失将项添加到集合中的顺序 坦白地说,最简单的方法是创建两个并行结构,比如创建堆栈和HashMap。将它们封装在一个更大的类中,该类具有添

我正在寻找一个java中的数据结构,它有一个fast contains方法,但可能需要某种排序,因为我需要能够添加到它并从中获取,但我希望它像一个具有LIFO功能的堆栈。这可能吗?我想到了一个HashSet,它有快速包含但没有保证顺序,还有一个LinkedList,它有保证顺序但有慢速包含。

Hmm,如果需要执行后进先出堆栈操作,则无法对集合进行排序,因为这样会丢失将项添加到集合中的顺序

坦白地说,最简单的方法是创建两个并行结构,比如创建堆栈和HashMap。将它们封装在一个更大的类中,该类具有添加和删除函数,这些函数始终向这两个类添加/删除。然后,您可以使用堆栈执行推送和弹出操作,使用HashMap执行包含操作

通常我不喜欢创建重复的数据,但我认为做您想要做的事情的唯一方法是拥有一个索引堆栈,这与我在这里建议的方法相当


我强调将其包装在一个进行添加和删除的类中,并确保所有添加和删除都通过该类。否则,如果执行添加/删除操作的代码分散在各处,则可能会导致这两个结构不同步。强制它全部通过一个类,您只需调试该部分一次。

嗯,如果您需要执行后进先出堆栈操作,则无法对集合进行排序,因为这样您就失去了将项添加到集合的顺序

坦白地说,最简单的方法是创建两个并行结构,比如创建堆栈和HashMap。将它们封装在一个更大的类中,该类具有添加和删除函数,这些函数始终向这两个类添加/删除。然后,您可以使用堆栈执行推送和弹出操作,使用HashMap执行包含操作

通常我不喜欢创建重复的数据,但我认为做您想要做的事情的唯一方法是拥有一个索引堆栈,这与我在这里建议的方法相当

我强调将其包装在一个进行添加和删除的类中,并确保所有添加和删除都通过该类。否则,如果执行添加/删除操作的代码分散在各处,则可能会导致这两个结构不同步。强制它通过一个类,您只需调试该部分一次。

LinkedHashSet使您部分达到了目的,但不幸的是,它并没有提供一个好的方法来删除LIFO

我想你想要的是一个封装LinkedList的东西,用于删除后进先出(LIFO)和一个HashMap来跟踪基数。然后你会有这些非常粗略的方法:

public class QuickCheckStack<T> {

   private final Map<T, Integer> elementCardinality = new HashMap<T, Integer>;
   private final Deque<T> stack = new LinkedList<T>();

   public void push(T element) {
      Integer count = elementCardinality.get(element);
      if (count == null) {
          count = 0;
      }
      elementCardinality.put(element, count + 1);
      stack.push(element);
   }

   public T pop() {
      T element = stack.pop();
      elementCardinality.put(element, elementCardinality.get(element) - 1);
      return element;
   }

   public boolean contains(T element) {
      Integer count = elementCardinality.get(element);
      return count != null && !count.equals(0);
   }
}
LinkedHashSet让你部分达到了目的,但不幸的是,它并没有提供一个好的方法来移除后进先出

我想你想要的是一个封装LinkedList的东西,用于删除后进先出(LIFO)和一个HashMap来跟踪基数。然后你会有这些非常粗略的方法:

public class QuickCheckStack<T> {

   private final Map<T, Integer> elementCardinality = new HashMap<T, Integer>;
   private final Deque<T> stack = new LinkedList<T>();

   public void push(T element) {
      Integer count = elementCardinality.get(element);
      if (count == null) {
          count = 0;
      }
      elementCardinality.put(element, count + 1);
      stack.push(element);
   }

   public T pop() {
      T element = stack.pop();
      elementCardinality.put(element, elementCardinality.get(element) - 1);
      return element;
   }

   public boolean contains(T element) {
      Integer count = elementCardinality.get(element);
      return count != null && !count.equals(0);
   }
}

@halex TreeSet不是后进先出结构。是否可以为此类数据结构提供用例?@halex TreeSet不是后进先出结构。是否可以为此类数据结构提供用例?