java课堂笔记------集合api

         Collection c = new ArrayList();

         * boolean add(E e)
         * 将当前集合中添加给定的元素
         * 若成功添加则返回true
         c.add("one");
         c.add("two");

         * int size()
         * 获取当前集合中的元素个数
         c.size();

         * boolean isEmpty()
         * 判断当前集合是否不包含任何元素
         * 当集合中没有元素时返回true
         boolean isEmpty = c.isEmpty();

         * void clear()
         * 清空集合元素
     c.clear();

         * boolean contains(E e)
         * 判断当前集合是否包含给定元素,包含则返回true
         * 判断依据是看给定的元素与集合中现有的元素是否
         * 存在equals比较为true的,有则认为包含!
         boolean contains = c.contains(e);

         * 集合提供了一个方法可以删除集合中的现有元素
     * boolean remove(E e)
     * 将给定的元素从集合中删除,成功删除返回true
         * 删除元素的判断依据是,删除当前集合中第一个与
         * 给定元素equals比较为true的。
     c.remove(e);

         * 并集
         * boolean addAll(Collection c)
         * 将给定的集合中的所有元素添加到当前集合中
         * 当执行完毕后,当前集合中的元素发生了改变
         * 就返回true
         c2.addAll(c1);

         * 判断当前集合中是否包含给定集合里的所有
         * 元素,全部包含则返回true。这里判断依据
         * 依然是依靠元素的equals比较的。
         * boolean containsAll(Collection c)
       boolean contains = c1.containsAll(c3);

     * 由于集合的具体实现类各不相同,Set集合大部分实现
     * 又是无序的,所以不能像数组那样根据下标位置获取
     * 具体的某一个元素。
     * 集合提供了统一的获取集合元素方式:遍历集合,而
     * 遍历是使用迭代器来完成的。
     * java.util.Iterator是迭代器的接口,定义了用于遍历
     * 集合的相关方法。不同的集合都实现了一个可以遍历自身
     * 的迭代器实现类。我们无需记住实现类的名字,只当是
     * 迭代器使用即可。
     * 迭代器迭代元素需要遵循:问,取,删。这个步骤。
     * 其中删除不是必须的。

         * 若需要遍历集合,可以调用集合的方法:
         * Iterator iterator()
         * 该方法会返回可以遍历当前集合的迭代器。
         Iterator it = c.iterator();

         * boolean hasNext()
         * 询问迭代器,其遍历的集合是否还有元素没有
         * 遍历过,有则返回true
         while(it.hasNext()){
             * E next()
             * 取出集合中下一个元素。
            String str = (String)it.next();
            /*
             * 删除"#"
             */
            if("#".equals(str)){
                /*
                 * 在使用迭代器遍历集合的过程中,不能通过
                 * 集合的方法改变集合元素,否则可能抛出异常
                 */
//                c.remove(str); 集合的方法
                /*
                 * 删除的是刚通过next()方法取出的元素。
                 */
                it.remove();//迭代器方法
            }
        }

         * java 5.0以后推出了一个新的特性:增强for循环
     * 又叫做:新循环,增强循环,for each
     * 新循环不能代替传统循环重复工作的需求。
     * 新循环是用来遍历集合或数组的。

        String[] array
            = new String[]{"one","two","three"};

        for(String str:array){
            System.out.println(str);
        }

         * 新循环并不是JVM认可的新语法。而是编译器认可
         * 的。编译器在编译源程序时若发现我们使用新循环
         * 来遍历集合时,会将代码改变为使用迭代器的方式
         * 遍历集合。所以新循环遍历集合本质上就是迭代器
         * 遍历。
         * 所以新循环在遍历集合的过程中不允许通过集合的
         * 方法修改元素数量。

        for(Object obj:c){
            if("#".equals(obj)){
                c.remove(obj);//错误
                i.remove(obj);//没有显示迭代,错误
            }
        }

     * List集合
     * 有序集,可重复集。
     * List的特点是可以像数组一样,根据下标操作元素。
     * 所以List提供了一些独有的方法。
     * 常用实现类:
     * ArrayList:内部由数组实现,查询快。
     * LinkedList:内部由链表实现,增删快。

        List<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");

         *    E get(int index)
         *    获取指定下标对应的元素。
         String str = list.get(1);

        //通过下标操作遍历集合
        for(int i=0;i<list.size();i++){
            str = list.get(i);
            System.out.println(str);
        }

         * E set(int index,E e)
         * 将给定的元素设置到指定的位置上,返回值为
         * 原位置上的元素。所以该操作时替换元素操作
         String old = list.set(1, "2");

     * List提供的另一对方法:
     * void add(int index,E e)
     * 向指定位置插入给定元素,原位置及后续元素顺序向后
     * 移动
     *
     * E remove(int index)
     * 删除并返回给定位置的元素。

        List<String> list = new LinkedList<String>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");

         * void add(int index,E e)
         list.add(2,"3");

         * E remove(int index)
     * 删除并返回给定位置的元素。
         String old = list.remove(3);

     * 集合转换为数组
     * Collection中提供了一个方法toArray
     * 允许我们将现有的集合转换为数组。

        Collection<String> c = new ArrayList<String>();
        c.add("one");
        c.add("two");
        c.add("three");
        c.add("four");

//        Object[] array = c.toArray(); 转换的是Object数组,所以一般不用这种,而用下面的那种

        String[] array
            = c.toArray(new String[c.size()]);

     * 数组转换为集合
     * 使用Arrays的静态方法asList()
     * 需要注意,数组只能转换为List集合。不能转换为Set
     * 原因在于:
     * 1:Set大部分是无序实现
     * 2:Set不允许存放重复元素,所以转换后可能丢失元素。

        String[] array = new String[]{"one","two","three"};
        List<String> list = Arrays.asList(array);

         * 修改该集合元素内容,原数组内容也会发生改变

         list.set(0, "1");
        //数组第一个元素也变为了"1"

         * 对于由数组转换的集合来说,添加新元素是不受支持的!所以下面代码会抛出异常
          list.add("four");

         * 所有的集合都支持一个构造方法,参数要求传入另一个集合。
         * 这个构造方法的作用是:
         * 创建当前集合的同时将给定的集合中的所有元素添加到当前集合中。
        List<String> list1 = new ArrayList<String>(list);

    * 获取List集合中的子集

        List<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<10;i++){
            list.add(i);
        }
        //[0,1,2,3,4,5,6,7,8,9]

         * List subList(int start,int end)
         * 获取当前集合中给定范围内的部分子集。
        List<Integer> subList = list.subList(3, 8);

         * 对子集的任何操作都会影响原集合
         * 清空子集,原集合中该部分内容也被删除。

 * 泛型
 * JDK5.0开始支持的新特性
 * 泛型是参数化类型,可以对一个类中的属性,
 * 方法的参数,方法的返回值类型进行约束,
 * 在使用时指定类型。

public class Point<T> {
    private T x;
    private T y;

    public Point(){

    }
    public Point(T x, T y) {
        this.x = x;
        this.y = y;
    }
    public T getX() {
        return x;
    }
    public void setX(T x) {
        this.x = x;
    }
    public T getY() {
        return y;
    }
    public void setY(T y) {
        this.y = y;
    }

    public static void main(String[] args) {
        Point<Integer> p1
            = new Point<Integer>(1,2);
        int x1 = p1.getX();

        Point<Double> p2
            = new Point<Double>(1.1,2.2);
        double x2 = p2.getX();

        Point<String> p3
            = new Point<String>("1","2");
        String x3 = p3.getX();
    }
}

 * 泛型的注意事项

         * 当使用一个具有泛型的类时,若不指定,则就
         * 按照默认的Object作为实际类型

     * 泛型在集合中的应用
     * 集合中的泛型是用来约束集合中元素的类型。

         Collection<String> c = new ArrayList<String>();
         c.add("one");

         * 迭代器也支持泛型,泛型与该迭代器遍历的集合
         * 的泛型类型一致即可。

        Iterator<String> it = c.iterator();
        while(it.hasNext()){
            String str = it.next();
        }

     * Collections: 集合的工具类
     * 该类提供了若干静态方法,可以方便操作集合。
     * 其中sort方法是用来排序List集的。进行自然排序

         * sort会对给定的List集合中的元素进行自然排序
         * 即:从小到大的顺序
         * Collections.sort(list);

         * 面试题:
         * Collection与Collections的区别?
         * 或分别说明它们

         * Collections的sort方法若希望对集合进行
         * 排序,必须保证集合中的元素是可比较大小的。
         * 所以要求元素必须实现Comparable接口,并
         * 重写其中的比较大小方法,才可以进行排序。

         * 虽然sort方法可以对集合中的元素进行自然排序
         * 但是必须要求元素实现Comparable接口,这就出现
         * 了由于想使用排序功能而必须改变我们定义的类的
         * 内容,这中现象称为"侵入性"。

 * 当集合中存放的是自定义类型元素时,使用Collections的sort方法排序的注意事项:
 *
 * 当前元素若希望可以比较大小,需要实现Comparable
 * 接口
 * Comparable支持泛型,而泛型的实际类型就是当前
 * 类。意思是说,哪个类实现Comparable接口,泛型
 * 就是哪个类。

public class Point implements Comparable<Point>{
    private int x;
    private int y;
    public Point(int x, int y) {
        super();
        this.x = x;
        this.y = y;
    }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }

    public String toString(){
        return "(" + x + "," + y + ")";
    }
    /**
     * CompareTo方法的作用是使当前对象与给定的对象o进行比较大小。
     * 返回值不关注具体值,而是关注取值范围:
     * 当返回值>0:当前对象比参数对象大
     * 当返回值<0:当前对象比参数对象小
     * 当返回值=0:两个对象相等
     */
    public int compareTo(Point o) {
        int len = this.x*this.x+this.y*this.y;
        int olen = o.x*o.x+o.y*o.y;
        return len-olen;
    }
}

         * 字符串String实现了Comparable接口
         * 排序规则:按照首字母的编码比大小。

         * Collections的重载sort方法要求我们传入两个
         * 参数:
         * 1:待排序的集合
         * 2:比较器
         * 通常有两种情况会使用该方法排序集合:
         * 1:元素已经实现了Comparable接口,但是比较大小
         *   的规则不能满足我们对于排序的需求时
         * 2:元素没有实现Comparable接口,并且也不希望为
         *   了这里排序而强制修改元素,要求其实现接口时
         *

//        MyComparator com = new MyComparator();

      Comparator<String> com
        = new Comparator<String>(){
          public int compare(String o1, String o2) {
            return o1.length()-o2.length();
          }

      };
      Collections.sort(list,com);

     class MyComparator implements Comparator<String>{
      /**
       * 字符串比较大小的规则:
       * 字符数量多的大
       */
      public int compare(String o1, String o2) {
        return o1.length()-o2.length();
      }
    }
时间: 2024-10-22 13:05:52

java课堂笔记------集合api的相关文章

java课堂笔记------字符串API

* int length() * 获取当前字符串中的字符个数(长度),无论中英文 * 每个字符都算一个长度 str.length(); * int indexOf(String str) * 查找给定的字符串在当前字符串中第一次出现的位置. * 返回值为给定的字符串第一个字符在当前字符串的下标 * 由于java大小写敏感,所以必须全部匹配上才可以返回具体的下标. index = str.indexOf("in"); * int indexOf(String str ,int from)

java课堂笔记------日期API

* 默认创建出来的Date实例表示当前系统时间 Date date = new Date(); * 获取Date内部维护的long值 long l = date.getTime(); * 支持传入long值的构造方法 * 创建的Date就表示该long值所表示的时间 Date now = new Date(1000*60*60*24); * 也可以在现有的Date对象上调用setTime方法 * 将long值传入,使其表示这个时间 date.setTime(1000*60*60*24); * j

线程(java课堂笔记)

1.两种方式的差异 2.线程的生命周期 3.线程控制(线程的方法) 4.线程同步 5.线程同步锁 一. 两种方式的差异 A extends Thread :简单 不能再继承其他类了(Java单继承)同份资源不共享 B implements Runnable:( 推荐) )多个线程共享一个目标资源,适合多线程处理同一份资源. 该类还可以继承其他类,也可以实现其他接口. 二. 线程的生命周期 新建:当程序使用new创建一个线程后,该线程处于新建状态,此时他和其他java对象一样,仅仅由Java虚拟机

java学习笔记—集合之Map集合

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Songti SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times } p.p4 { margin: 0.0px 0.0px 0.0px 0.0

java课堂笔记------Map,队列,栈

* java.util.Map * Map看起来像是一个多行两列的表格 * 每条记录分为两部分:key,value * 其中在一个Map中key是不允许重复的.(equals比较) * * 常用的实现类:java.util.HashMap(散列算法实现) * TreeMap(二叉树实现) Map<String,Integer> map = new HashMap<String,Integer>(); * V put(K k,V v) * 将给定的key与value存入到Map中.

Java学习笔记----------集合Set

Java集合-----Set集合:就像一种容器,可以把多个对象放进该容器中.Java集合分为:Set.List.Map三种体系. Set:无序的,不可重复的: List:有序的,可重复的: Map:代表有映射关系的集合,Map保存的每一项数据都是key-value对.注意:Java 5后添加了Queue体系,代表一种队列集合实现. 集合和数组对比:1.数组一旦初始化,长度不可变:2.数组无法保存具有映射关系的数据,例如成绩表:语文---79:3.数组的元素可以是基本类型的值,也可以是对象,而集合

java学习笔记 --- 集合

1.定义:集合是一种容器,专门用来存储对象 数组和集合的区别?   A:长度区别  数组的长度固定 集合长度可变 B:内容不同  数组存储的是同一种类型的元素  而集合可以存储不同类型的元素  C:元素的数据类型问题  数组可以存储基本数据类型,也可以存储引用数据类型 集合只能存储引用类型 2.集合的继承体系结构 由于需求不同,Java就提供了不同的集合类.这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,   我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图.  

我做的第一个程序(菜鸟的java课堂笔记)

内存: 堆区,栈区,常量区,计数区,代码区: 数据类型: 基本数据类型:整形,浮点型,布尔型 boolean 只能返回真假值,字符型: 引用数据类型:类,数组: 基本数据类型-->直接存放到栈区: 引用数据类型-->将引用放到栈区,将内容放到堆区: 全栈工程师:全都会,最牛逼: 数组声明: int [] a = new int [7]: 方法: 修饰符 返回值类型 方法名(参数列表){ 方法体... [return] } 方法的唯一性: 方法名+参数列表(顺序,个数,类型): 方法的重载: 两

Java基础笔记——集合工具类

1 package collections_show; 2 /* 3 * 操作集合Collection的工具类Collections 4 * 说明: 5 Collections 是一个操作 Set.List 和 Map 等集合的工具类 6 Collections 中提供了一系列静态的方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控制等方法 7 8 排序操作:(均为static方法) 都是List 9 ---> reverse(List):反转 List