A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 695010894 中级黑马   /  2016-4-5 12:36  /  531 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


//使用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 的父类.

1 个回复

倒序浏览
你好,给你举个简单的例子吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马