• 泛型与常见数据结构


     集合体系图:

    * ArrayList
    * 集合的体系结构:
    * 由于不同的数据结构(数据的组织,存储方式),所以Java为我们提供了不同的集合,
    * 但是不同的集合他们的功能都是相似,不断的向上提取,将共性抽取出来,这就是集合体系结构形成的原因
    *
    * 体系结构:
    * 怎么学习?最顶层开始学习,因为最顶层包含了所有的共性
    * 怎么使用?使用最底层,因为最底层就是具体的实现
    *
    * Collection
    * List
    * ArrayList

    * Collection
    * boolean add(E e)
    * void clear()
    * boolean contains(Object o)
    * boolean isEmpty()
    * boolean remove(Object o)
    * int size()
    * Object[] toArray()
    *
    *
    * Iterator<E> iterator()

    * 集合的遍历方式:
    * 1.toArray(),可以把集合转换成数组,然后遍历数组即可
    * 2.iterator(),可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合
    *
    * Iterator:可以用于遍历集合
    * E next() :返回下一个元素
    * boolean hasNext() :判断是否有元素可以获取
    *
    * 注意:Exception in thread "main" java.util.NoSuchElementException
    * 使用next方法获取下一个元素,如果没有元素可以获取,则出现NoSuchElementException

    1         while(it.hasNext()) {
    2             System.out.println(it.next());
    3         }
     1         Collection c = new ArrayList();
     2         //添加元素
     3         c.add("hello");
     4         c.add("world");
     5         c.add("java");
     6         //获取数组
     7         Object[] objs = c.toArray();
     8         //遍历数组
     9         for (int i = 0; i < objs.length; i++) {
    10             System.out.println(objs[i]);
    11         }

    * 需求:判断集合中是否包含元素java,如果有则添加元素android
    * Exception in thread "main" java.util.ConcurrentModificationException:并发修改异常
    * 迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常
    *
    * 解决方案:
    * 你就别使用迭代器
    * 在使用迭代器进行遍历的时候使用迭代器来进行修改

    1         ListIterator lit = c.listIterator();
    2         while(lit.hasNext()) {
    3             String s = (String)lit.next();
    4             if(s.equals("java")) {
    5                 lit.add("android");
    6             }
    7         }
    1         Collection c = new ArrayList();
    2         //添加元素
    3         c.add("hello");
    4         c.add("world");
    5         c.add("java");
    6         //判断集合中是否包含元素java
    7         if(c.contains("java")) {
    8             c.add("android");
    9         }

    * 使用集合存储自定义对象并遍历
    * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,
    * 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型
    *
    * 泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
    * 泛型好处:
    * 避免了类型转换的问题
    * 可以减少黄色警告线
    * 可以简化我们代码的书写
    *
    * 什么时候可以使用泛型?
    * 问API,当我们看到<E>,就可以使用泛型了

    //创建集合对象
    Collection<Student> c = new ArrayList<Student>();

    * foreach:增强for循环,一般用于遍历集合或者数组
    * 格式:
    * for(元素的类型 变量 : 集合或者数组对象) {
    * 可以直接使用变量;
    * }
    注意:在增强for循环中不能修改集合,否则会出现并发修改异常。

    public interface Iterable<T>
    实现这个接口允许对象成为 "foreach" 语句的目标。

    1         for (String string : c) {
    2             c.add("android");
    3             System.out.println(string);
    4         }

    * List:
    * 有序的(存储和读取的顺序是一致的)
    * 有整数索引
    * 允许重复的
    *
    * List的特有功能:
    * void add(int index, E element)
    * E get(int index)
    * E remove(int index)
    * E set(int index, E element)
    *
    * 增删改查

     1         //创建的列表对象
     2         List list = new ArrayList();
     3         
     4         //void add(int index, E element)  : 在指定索引位置添加指定元素
     5         list.add(0, "hello");
     6         list.add(0, "world");
     7         list.add(1, "java");
     8         
     9         //E get(int index)  :根据索引返回元素
    10         System.out.println(list.get(0));
    11 
    12         /*for (int i = 0; i < list.size(); i++) {
    13             System.out.println(list.get(i));
    14         }*/
    15         
    16         //E remove(int index)  : 删除指定元素并返回
    17         
    18         //System.out.println(list.remove(5));
    19         
    20         //E set(int index, E element) : 将指定索引位置的元素替换为指定元素,并将原先的元素返回
    21         System.out.println(list.set(0, "android"));

    * List的常用子类:
    * ArrayList
    * 底层是数组结构,查询快,增删慢
    * LinkedList
    * 底层结构是链表,查询慢,增删快
    *
    * 如何选择使用不同的集合?
    * 如果查询多,增删少,则使用ArrayList
    * 如果查询少,增删多,则使用LinkedList
    * 如果你不知道使用什么,则使用ArrayList
    *
    * LinkedList的特有功能:
    * void addFirst(E e)
    * void addLast(E e)
    E getFirst()
    E getLast()
    E removeFirst()
    E removeLast()

     1             LinkedList list = new LinkedList();
     2             list.add("hello");
     3             list.add("world");
     4         
     5             //void addFirst(E e)  :将元素添加到索引为0的位置
     6              //void addLast(E e) :将元素添加到索引为size()-1的位置
     7             list.addFirst("java");
     8             list.addLast("android");
     9             
    10              //E getFirst()  :获取索引为0的元素
    11              //E getLast()  :获取索引为size()-1的元素
    12             //System.out.println(list.getFirst());
    13             //System.out.println(list.getLast());
    14             
    15              //E removeFirst() :删除索引为0的元素并返回
    16              //E removeLast() :删除索引为size()-1的元素并返回
    17             System.out.println(list.removeFirst());
    18             System.out.println(list.removeLast());
  • 相关阅读:
    轮廓 | outline (Basic User Interface)
    转换 | CSS Transitions (Animations & Transitions)
    越线 | line-break (Text)
    贴士和技巧 | CSS Animations: Tips (Animations & Transitions)
    负 | @counter-style.negative (Counter Styles)
    调整 | resize (Basic User Interface)
    再见乱码:5分钟读懂MySQL字符集设置
    git
    Python 内存&函数调用关系图
    Python 笔记
  • 原文地址:https://www.cnblogs.com/samuraihuang/p/9791416.html
Copyright © 2020-2023  润新知