Если вам не нужно сохранять исходный объект, вы можете его закодировать и создать новый массив уникальных значений. В C # используйте Список, чтобы получить доступ к требуемой функциональности. Это не самое привлекательное или интеллектуальное решение, но оно работает.
int[] numbers = new int[] {1,2,3,4,5,1,2,2,2,3,4,5,5,5,5,4,3,2,3,4,5};
List<int> unique = new List<int>();
foreach (int i in numbers)
if (!unique.Contains(i))
unique.Add(i);
unique.Sort();
numbers = unique.ToArray();
Здесь:
public class Tree<T> {
private Node<T> root;
public Tree(T rootData) {
root = new Node<T>();
root.data = rootData;
root.children = new ArrayList<Node<T>>();
}
public static class Node<T> {
private T data;
private Node<T> parent;
private List<Node<T>> children;
}
}
Это базовая древовидная структура, которая может использоваться для String
или любого другого объекта. Довольно легко реализовать простые деревья, чтобы делать то, что вам нужно.
Все, что вам нужно добавить, - это методы добавления, удаления, обхода и конструкторы. Узел
является основным строительным блоком дерева
.
public class Tree {
private List<Tree> leaves = new LinkedList<Tree>();
private Tree parent = null;
private String data;
public Tree(String data, Tree parent) {
this.data = data;
this.parent = parent;
}
}
Очевидно, вы можете добавить служебные методы для добавления / удаления дочерних элементов.
На самом деле в JDK реализована довольно хорошая древовидная структура.
Посмотрите на javax.swing.tree, TreeModel и TreeNode. Они предназначены для использования с JTreePanel
, но на самом деле это довольно хорошая реализация дерева, и ничто не мешает вам использовать ее без интерфейса swing.
Обратите внимание, что начиная с Java 9 вы можете не использовать эти классы, так как они не будут присутствовать в 'Compact profiles'.