容器
基本概念_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")+"\t"+list.indexOf("sql"));
61 //(11)遍历集合中元素的内容
62 /**(1)使用加强for循环遍历集合中的元素*/
63 System.out.println("\n使用加强for循环遍历集合中的元素\n");
64 for(Object obj:list){
65 System.out.println(obj);
66 }
67 /**(2)使用普通for循环遍历集合中的元素对象*/
68 System.out.println("\n使用普通for循环遍历集合中的元素对象\n");
69 for(int i=0;i<list.size();i++){
70 System.out.println(list.get(i));
71 }
72 /**(3)使用迭代器*/
73 System.out.println("\n使用迭代器遍历集合中的元素\n");
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("\n逆向遍历集合中的元素\n");
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 }
未完待续........(实在是看不懂了,等基础好了,在回头看)