容器
基本概念_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)add16 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
JDK与JRE的区别
JRE: Java Runtime Environment
JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义是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={};默认长度为017 * 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) { //true45 //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 }
未完待续........(实在是看不懂了,等基础好了,在回头看)