//使用LinkedList 模拟一个堆栈或者队列数据结构.
//堆栈先进后出,队列先进先出;
创建类,加入元素,移除元素
class LinkedListDemo
{
public static void main(String[] args)
{
LinkedList link = new LinkedList();
link.addFirst
}
}
//去除重复元素
遍历,如果不含有,取元素
//将自定义对象作为元素存到ArrayList集合,并去除重复元素.
思路:
比如人,同名同年龄视为同元素
1,对人描述,将数据分装进人对象
2,定义容器,将人存入
3,取出
List 集合判断元素是否相同,依据的是元素的equals方法.
|--Set 集合的功能和 Collection 是一致的.
|--HashSet:低层数据结构是哈希表.线程是非同步的.
如何保证元素唯一性:通过元素的两个方法,hashCode和equals来完成
如果元素的hashCode值不相同,则不会调用equals.
对于判断元素是否存在,以及删除等操作,依赖的方法是元素hashcode和equals方法.
|--TreeSet:可以set集合中的元素进行排序.
底层数据结构是二叉树,保证元素唯一性的依据: compareTo方法 return 0;
排序方式:
1,让元素自身具备比较性,元素需要实现Coparable 接口,覆盖compareTo方法.也叫元素的自然顺序或默认顺序.
2,当元素自身不具备比较性时,或者所具备的比较性不是所需要的,这时候需要让集合自身具备比较性.
在集合初始化时,就有了比较方式.
定义一个类,实现Comparator 接口,重写compare方法.
需求:
往 TreeSet 集合中存储自定义对象学生.
想按照学生的年龄进行排序.
排序时当主要条件相同时,一定要比较次要条件
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
ts.add("cba");
ts.add("aaa");
ts.add("bca");
ts.add("abcd");
Iterator it = new Iterator();
while (it.hasnext();)
{
System.out.println(it.next());
}
}
}
class Student implements Comparable //该接口强制让学生具备比较性
{
private String name;
private int age;
Student(String name, int age)
{
this.name = name;
this.age = age;
}
public int compareto(Object obj)
{
if (!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s = (Student) obj;
if (this.age > s.age)
return 1;
}
}
泛型:JDK1.5版本以后出现的新特性.用于解决安全问题,是一个安全机制.
好处:
1,将运行时期出现的问题ClassCastException问题转移到了编译时期,方便程序员解决问题
避免运行过程中出现问题.
2,避免了强制转换的麻烦.
泛型格式:使用<>来定义要操作的引用数据类型.什么时候使用泛型:
只要见到<>就要定义泛型;其实<>就是用来接收类型的.
当使用集合时,将集合中要存储的数据类型作为参数.
泛型类什么时候定义?
当类中要操作的引用数据类型不确定的时候,早期第一Object来完成,现在定义泛型类来定义.
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要明确操作的对象具体类型后,
所有要操作的类型就已经固定了;为了让不同的方法操作不同不确定的类型,可以将泛型定义在方法上.
特殊之处:
静态方法不可以访类上定义的泛型,如果静态方法操作的引用数据类型不确定,可将泛型定义在方法上.
<?> 通配符,也可理解为占位符;
<? extends E>:上限,可以接收 E 类型或者 E 的子类;
<? super E>: 下限,可以接收 E 类型或者 E 的父类.
|
|