容器
基本概念_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 }
未完待续........(实在是看不懂了,等基础好了,在回头看)