五容器

容器

基本概念_Collection_Set_List接口介绍

   ·为什么需要集合

  数组插入,删除不可以改变数组的长度,数组具有一定的拘束性

   ·容器框架

  java集合框架提供了一套性能优良,使用方便的接口和类,它们位于java.util包中

  存放在集合中的数据叫做元素(element)      //集合只能存放对象

    Collection接口 (List 和 Set接口是Collection接口的子类接口)

  List接口  

  Set接口

   ·各接口的特点

  Collection接口存储一组不唯一,无序的对象

  List接口存储一组不唯一,有序(索引顺序)的对象

  Set接口存储一组唯一,无序的对象

List接口ArrayList用法详解

   ·ArrayList的用法:

 1 package com.zqf.list_arraylist;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 import java.util.ListIterator;
 7 import java.util.Scanner;
 8 
 9 import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
10 
11 public class TestArrayList {
12     public static void main(String[] args) {
13         //创建集合对象,接口new实现类
14         List list = new ArrayList();
15         //(1)add
16         list.add("hello");
17         list.add(123);        //自动装箱
18         list.add(new Scanner(System.in));
19         //(2)集合元素的个数size()
20         System.out.println(list.size());
21         System.out.println("集合是否为空:"+list.isEmpty());
22         //(3)addAll(Collection c)
23         List list2=new ArrayList();
24         list2.add("hello");
25         list2.add(123);
26         list.add(list2);
27         System.out.println("list集合中元素的个数:"+list.size());
28         System.out.println(list);
29         //(4)删除
30         System.out.println("根据对象去删除:");
31         list.remove("hello");
32         System.out.println(list);
33           //list.remove(123);         //认为123是索引
34         list.remove(new Integer(123));
35         System.out.println(list);
36         list.add("world");
37         list.removeAll(list2);
38         list.retainAll(list2);
39         System.out.println(list);
40         
41         //(5)判断
42         System.out.println("hello在集合中是否存在:"+list.contains("hello"));
43         System.out.println("java在集合中是否存在:"+list.contains("java"));
44         //(6)清空元素中所有的集合对象
45         System.out.println(list);
46         System.out.println(list2);
47         System.out.println(list.containsAll(list2));
48         //list.clear();
49         //System.out.println(list);
50         
51         //(7)获取指定索引位置上的元素对象
52         System.out.println(list.get(1));
53         //设置
54         list.set(1, "java");
55         System.out.println(list);
56         //(9)在指定的索引位置上添加元素对象
57         list.add(1,"html");
58         System.out.println(list);
59         //(10)查找元素在集合中的位置
60         System.out.println(list.indexOf("java")+"	"+list.indexOf("sql"));
61         //(11)遍历集合中元素的内容
62         /**(1)使用加强for循环遍历集合中的元素*/
63         System.out.println("
使用加强for循环遍历集合中的元素
");
64         for(Object obj:list){
65             System.out.println(obj);
66         }
67         /**(2)使用普通for循环遍历集合中的元素对象*/
68         System.out.println("
使用普通for循环遍历集合中的元素对象
");
69         for(int i=0;i<list.size();i++){
70             System.out.println(list.get(i));
71         }
72         /**(3)使用迭代器*/
73         System.out.println("
使用迭代器遍历集合中的元素
");
74         Iterator ite = list.iterator();      //Iterator为迭代器
75 while(ite.hasNext()){ //判断集合中是否有元素对象 76 Object obj = ite.next(); 77 System.out.println(obj); 78 } 79 System.out.println("使用listIterator()遍历"); 80 ListIterator listIte = list.listIterator(); 81 System.out.println("正向遍历"); 82 System.out.println("到达集合的开头,后面还有元素对象吗?"+listIte.hasNext()); 83 System.out.println("到达集合的开头,前面有元素对象吗?"+listIte.hasPrevious()); 84 while(listIte.hasNext()){ 85 System.out.println(listIte.next()); 86 } 87 System.out.println("到达集合的末尾,后面还有元素对象吗?"+listIte.hasNext()); 88 System.out.println("到达集合的末尾,前面有元素对象吗?"+listIte.hasPrevious()); 89 System.out.println(" 逆向遍历集合中的元素 "); 90 while(listIte.hasPrevious()){ 91 System.out.println(listIte.previous()); 92 } 93 } 94 }

 JDK与JRE的区别

  JRE: Java Runtime Environment
  JDK:Java Development Kit
  JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
  JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
  如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本。

ArrayList_JDK_源码分析 

 1 package com.zqf.list_arraylist;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 import java.util.ListIterator;
 7 import java.util.Scanner;
 8 
 9 import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
10 
11 public class TestArrayList {
12     /**ArrayList源码分析
13     *(1)无参构造方法
14     *        this.elementData 是一个Object类型的数组
15     *        DEFAULTCAPACITY_EMPTY_ELEMENTDATA;也是一个Object类型的数组
16     *        DEFAULTCAPACITY_EMPTY_ELEMENTDATA={};默认长度为0
17     *    public ArrayList(){
18              this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
19              //相当于this.elementData={};
20      }
21      (2)带参构造方法
22      public Arraylist(int initialCapacity){                
23          if(initialCapaty > 0){
24              this.elementData = new Object[initialCapacity];           
25              //this.elementData = new Object[20];  
26              }
27      }  
28      (3)添加方法add(Object obj)
29      public boolean add(E e){
30          //检测空间容量是否够用
31          ensureCapacityInternal(size +1);    //Increments modCount!
32          //添加元素    elementData[size]=e; size++;
33          elementData[size++] = e;
34          return true;
35      }
36      (4)检测空间容量是否够用
37      private void ensureCapacityInternal(int minCapacity) {
38          ensureExplicitCapacity(calculaeCapacity(elementData,minCapacity));
39      }
40          首先调用执行,计算容量
41          calculateCapacity(elementData,minCapacity)
42          //calculateCapacity方法定义
43          private static int calculateCapacity(Object[] elementData,int minCapacity){
44         if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {        //true
45                     //Math.max(10,1)
46             return Math.max(DEFAULT_CAPACITY, minCapacity);
47         }
48         return minCapacity;        //执行完之后的结果为 10 
49         }
50         //容量计算完毕后,执行ensureExplicitCapacity方法   ensureExplicitCapacity(10)
51          ensureExplicitCapacity方法定义
52     **/
53     public static void main(String[] args) {
54         ArrayList list = new ArrayList();
55         list.add("hello");
56         Object [] obj = {};
57     }
58 }

LinkedList的特点_链表_JDK源码分析

   LinkedList的特点

   链表

  单向链表:(1)一个节点:数据域(data),指针域(next)

       (2)多个节点组成单向链表

  双向列表:(1)一个节点

       (2)多个节点组成链表

   JDK源码分析

  add(Object obj)

 1 package com.zqf.linkedlist;
 2 
 3 import java.util.LinkedList;
 4 
 5 public class TestLinkList {
 6     /**
 7      * LinkedList底层数据结构是链表,删除和添加元素效率较高,数据结构复杂
 8      * ArrayList底层数据结构是数组,删除和添加元素效率比较低
 9      * LinkedList底层源码分析
10      * (1)构造方法
11      * public LinkedList(){
12      * }
13      * (2)添加方法
14      * public boolean add(E e) {
15         linkLast(e);
16         return true;
17     }
18      */
19     public static void main(String[] args) {
20         LinkedList list = new LinkedList();
21         //添加元素
22         list.add("hello");
23         list.addFirst("java");
24         list.addLast("world");
25         //删头,删尾
26         //list.removeLast();
27         //list.removeFirst();
28         System.out.println(list);
29         //遍历
30         for(Object obj:list){
31             System.out.println(obj);
32         }
33     }
34 }

未完待续........(实在是看不懂了,等基础好了,在回头看)

原文地址:https://www.cnblogs.com/zqfdgzrc/p/10633765.html