package com.mypack.ds;
import java.util.Random;
public class TreeSet<T>
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
TreeSet<Integer> tree = new TreeSet<Integer>();
for (int i = 0; i < 20; i ++)
{
tree.add(new Random().nextInt(100));
}
System.out.println(tree);
}
private Entry<T> root;
private volatile Entry<T> entry;
public TreeSet()
{
}
public void add(T node)
{
if (root == null)
{
entry = root;
final Entry<T> tmp = entry;
synchronized (TreeSet.class)
{
if (tmp == null)
{
root = new Entry<T>(node);
}
}
}
else
{
insertNode(root, node);
}
}
public String toString()
{
StringBuilder sb = new StringBuilder();
travel(root, sb);
return sb.toString();
}
void travel(Entry<T> root, StringBuilder sb)
{
if (root.left == null)
{
sb.append(root.value).append(",");
}
else
{
travel(root.left, sb);
}
sb.append(root.value).append(",");
if (root.right == null)
{
sb.append(root.value).append(",");
}
else
{
travel(root.right, sb);
}
}
synchronized void insertNode(Entry<T> obj, T node)
{
Comparable<T> c = (Comparable<T>)node;
// right
if (c.compareTo(obj.value) > 0)
{
if (obj.right != null)
{
insertNode(obj.right, node);
}
else
{
Entry<T> en = new Entry<T>(node);
obj.right = en;
}
}
// left
else
{
if (obj.left == null)
{
Entry<T> en = new Entry<T>(node);
obj.left = en;
}
else
{
insertNode(obj.left, node);
}
}
}
static class Entry<T>
{
Entry left;
T value;
Entry right;
Entry(T value)
{
this.value = value;
}
}
}
分享到:
相关推荐
TreeSet<User> treeSet = new TreeSet<>(Comparator.comparing(User::getAge)); ``` 此外,Comparator还可以通过`thenComparing()`方法进行链式比较,这样可以实现多个条件的排序。例如,如果年龄相同,我们可以...
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(t -> t.getName()))), ArrayList::new )); ``` **方法二:使用自定义的distinctByKey方法去重** Java 8的Stream API中的`distinct()`方法...
this.children = new ArrayList<>(); } // Getters and setters for data, parent, and children } ``` 树形结构在许多场景下都非常有用,例如在文件系统中,目录和文件的层次关系就形成了一个树;在计算机科学...
在本例中,我们创建了一个自定义的 `LenSort` 类,实现了 `Comparator<String>` 接口。`compare()` 方法接收两个 `String` 参数,并返回一个整数值,根据字符串长度进行比较。使用泛型 `<String>`,我们可以直接将...
Comparator<Person> salaryComparator = new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { return Double.compare(p1.getSalary(), p2.getSalary()); } } ``` 在上面的例子中...
- **语法**:定义一个泛型类或接口时,在类名或接口名后加上尖括号`<>`,并在其中指定类型参数,通常使用大写字母如`T`、`E`等表示。例如,`class MyGenericClass<T>`。 - **类型参数使用**:类型参数可以在类或接口...
- **使用**:`ClassName<String> obj = new ClassName<>();` **2.4 泛型方法** - **定义**:`<T> returnType methodName(...){...}` - **使用**:`methodName<T>(...)` **2.5 泛型接口** - **定义**:`interface...
泛型可以用在类、接口和方法上,例如 ArrayList<T>、List<String> 和泛型方法 `<T> void foo(T t)`。 以上就是针对 Java 面试题中涉及的一些核心知识点的详细解释,涵盖了基础概念、数据结构、异常处理、多线程、...
泛型类如`ArrayList<T>`,T代表一个类型参数,可以在使用时指定具体的类型,如`ArrayList<String>`。 【Java注解】 注解(Annotation)是元数据的一种形式,用于提供编译器和JVM有关代码的附加信息。例如,`@...
同时,`Collections`工具类提供了多种静态方法,如排序(`sort(List<T> list)`),反转(`reverse(List<T> list)`),查找(`indexOfSubList(List<T> sourceList, List<T> targetList)`等)。 7. **集合与数组的区别**:...
List<User> users = ... // 用户列表,User包含name和age属性 users.sort(Comparator.comparing(User::getName).thenComparing(User::getAge)); ``` 通过以上内容,我们了解到定义比较器是实现自定义排序的关键...
List<Person> persons = new ArrayList<>(); // 添加Person对象... Collections.sort(persons); ``` 上述代码中,`Person`类实现了`Comparable`接口,提供了默认的排序依据(按年龄升序)。如果需要按照其他规则...
Collection<String> books = new ArrayList<>(); books.add("红楼梦"); books.add("三国演义"); books.add("西游记"); System.out.println("初始状态:" + books); books.remove("红楼梦"); // 移除元素 System.out....
- **树**:如二叉树、平衡树(AVL、红黑树),C#的`System.Collections.Generic.TreeSet<T>`类提供了部分树结构。 6. **递归与分治**: - **递归**:函数调用自身,如阶乘计算、快速排序等。 - **分治**:将大...
List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); ...
* \0mnn The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7) \0mnn 十进制数 0mnn (0 <= m <= 3, 0 <= n <= 7) * \xhh The character with hexadecimal value 0xhh \xhh 十六进制数 0xhh...
自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用 Comparator 接口,实现 int compare(T o1,T o2) 方法。 总结 1. TreeSet 是二差树实现的,Treeset 中的数据是自动排好序的,不允许放入 null...
<Title>奥运村进入指南</Title> <Content>#¥%*</Content> </Book> ``` #### 题目七:SQL查询 **问题:** 给定一个表 `table1`,有两个字段,一个是股票编号 `Id`,另一个是股票更新时间 `UpdateTime`,用标准 SQL...
Box<String> box = new Box<>(); box.set("Hello"); String str = box.get(); // 不需要显式转换 ``` #### 9. Java集合框架高级特性 - **迭代器**:`Iterator`接口用于遍历集合中的元素。 - **枚举类型**:定义...