Collection
list 有序 带索引,通过索引就能够精确查找元素,元素 可以重复
增加:add(element) add(index,element):方便摘要
删除:remove(element) remove(index)
修改:set(index.element)
查询:get(index)
|-Vector 也是一个可增长的数组结构,同步的,查询速度慢,增删速度更慢
|--ArrayList 数组结构 长度不可变(原理就是创建新数组+复制数组)查询速度很快,增删慢,不同步的
|--LinkList 链表结构 不同步 增删速度慢 查询速度快
队列:先进先出 First in First Out fifo
堆栈:先进后出 First In last Out Filo
|set 不包含重复元素的集合 而且方法和Collection一致
|hashSet 哈希表结构,不同步,保证元素的唯一性依赖HashCode()和equals()查询速度快
|treeSet 可以对set集合中的元素进行排顺
List可以 存储重复元素,如果需求中要求容器中的元素必须保证唯一性
需求1:
20 Student 数组
Student[] stus = new Student[20];
需求2:
数组的长度是固定
创建一个新数组,将原来的数组中的元素 复制到新数组中
集合
当数据多了需要存储,需要容器,而数据的个数还不确定,无法使用数组,这时候可以使用java中的另一个容器--- 集合
集合和数组有什么区别?
数组:长度是固定的 ,数组中存储的是同一类型的元素 ,存储基本数据类型值
集合:长度是可变的,存储对象,而且对象类型可以不一致
什么时候用集合呢?
解决当对象多的时候,先进行存储,非常方便的存储方式
在1.2版为了更多的需求,出现了集合框架,有了跟多的容器来完成不同的需求
容器的区分按照数据结构来区分
不断向上抽取的过程中,出现体系,就形成了集合框架 最顶层:Collection接口 (看顶层,用底层)
总结:
学习体系:看顶层,用底层
一个容器应该具备什么:添加元素,删除元素,
Collection
|--List 有序,带索引,通过索引就能够精确的查找元素,元素可以重复
增加:add(element) add(index,element);方法摘要
删除:remove(element) remove(index)
修改 :set(index.element)
查询:get(index)
|--Set
package ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo01 {
public static void main(String[] args) {
//构造一个初始化为十的空列表.ArrayList就会出现实现,数组是具有索引的
List list = new ArrayList();
ArrayList list1 = new ArrayList();
//可以去添加不同的数据类型 但通常都会写一样的 数据
list.add(1);
list.add(4);
list.add(3);
list.add(4);
list1.addAll(list);
System.out.println(list);
System.out.println(list1);
//有序的
for (int i = 0; i < list.size(); i++) {
}
System.out.println(list);
//是可以在迭代器中修改元素的
ListIterator it = list.listIterator();
//不能再迭代器的过程中修改元素
while (it.hasNext()) {
int num =(int)it.next();
if(num == 3)
it.add(10);
System.out.println(it.next());
}
System.out.println(list);
//这种方式会多一点 迭代器
for (Iterator it1 = list1.iterator(); it1.hasNext();) {
int num =(int)it1.next();
if(num==3)
list.add(10);
System.out.println(num);
}
System.out.println(list);
}
//toArray为啥要有这个方法 因为集合是可变得 转成数组就是为了不可变
int[] arr ={1,2,3,4};
//大坑小心
List list2 =Arrays.asList(arr);//数组转成集合 方便去添加 会有一场
//java.lang.UnsupportedOpenrationException
//list2.add(5);
Object[] arr2 = list2.toArray();//集合转成数组 不让在修改
}
//=============================================================
package com.tz.api.list;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import com.tz.domain.Student;
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList();
//1.娣诲姞鍏冪礌
list.add(new Student("xxs",21));
list.add(new Student("xxs01",22));
list.add(new Student("xxs02",23));
list.add(new Student("xxs03",24));
//鎻掑叆鍏冪礌
list.add(1,new Student("xbb", 18));
//鍒犻櫎鍏冪礌
list.remove(3);
for (Iterator it = list.iterator(); it.hasNext();) {
Student stu =(Student) it.next();
System.out.println(stu);
}
//淇敼鍏冪礌
list.set(1, new Student("xxs04",25));
for (int i = 0; i < args.length; i++) {
System.out.println("get("+1+"):"+list.get(i));
}
// Object obj= list.get(1);
//System.out.println(obj);
}
}
//================================================================================
package com.tz.api.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo {
public static void main(String[] args) {
//1.创建List
List list =new ArrayList();
list.add("xxs");
list.add("xxs02");
list.add("xxs03");
list.add("xxs04");
ListIterator it = list.listIterator();//获取列表迭代器对象
while(it.hasNext()){
Object obj = it.next();
if ("tanzhou2".equals(obj)) {
it.set("java");
list.add("java");
/**
* 引发ConcurrentModificationException在迭代器过程中集合的方法对元素进行了
* 操作,导致并不知道集合中的变化,容易引起数据的不确定性
* 为了避免异常 使用迭代器的方法操作
* 发生Iterator有一个接口ListIterator可以解决可这个问题如何去获取该对象 的儿子接口额怒对象
*/
}
}
System.out.println(list);
}
}
//==========================================
ArrayList 与LinkedList
哈希表结构
package com.tanzhou.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.tanzhou.domain.Student;
public class SetDemo {
public static void main(String[] args) {
Set set = new HashSet();
// set.add("java");
// set.add("haha");
// set.add("xixi");
// set.add("haha");
// set.add("tanzhou");
// set.add("haha");
// set.add("xixi");
/*
为什么学生对象没有保证唯一性呢?
通过对哈希表的分析,发现存储元素是先调用了元素对象的hashCode(),而每个学生对象都是新建立的对象,所以hashCode值都不相同,
也就不需要判断equals();
如果想保证学生对象的唯一性 就不能够使用object中的hashCode() ,需要重新定义hashCode()的算法内容
*/
set.add(new Student("小一1",22));
set.add(new Student("小一2",21));
set.add(new Student("小一3",24));
set.add(new Student("小一4",23));
set.add(new Student("小一5",23));
for (Iterator it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}
//=================================================
package com.tanzhou.list.subclass;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.addFirst("a1");
link.addFirst("a2");
link.addFirst("a3");
// System.out.println(link.getFirst());
// System.out.println(link.removeFirst());
// System.out.println(link.removeFirst());
// System.out.println(link.removeFirst());
// System.out.println(link.removeFirst());//java.util.NoSuchElementException
while(!link.isEmpty()){//判断集合是否为空
System.out.println(link.removeLast());
}
}
}
//===================================================
package com.tanzhou.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.tanzhou.domain.Student;
public class SetDemo {
public static void main(String[] args) {
Set set = new HashSet();
// set.add("java");
// set.add("haha");
// set.add("xixi");
// set.add("haha");
// set.add("tanzhou");
// set.add("haha");
// set.add("xixi");
/*
为什么学生对象没有保证唯一性呢?
通过对哈希表的分析,发现存储元素是先调用了元素对象的hashCode(),而每个学生对象都是新建立的对象,所以hashCode值都不相同,
也就不需要判断equals();
如果想保证学生对象的唯一性 就不能够使用object中的hashCode() ,需要重新定义hashCode()的算法内容
*/
set.add(new Student("小一1",22));
set.add(new Student("小一2",21));
set.add(new Student("小一3",24));
set.add(new Student("小一4",23));
set.add(new Student("小一5",23));
for (Iterator it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}
//=================================================
package com.tanzhou.set;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
Set set = new TreeSet();
set.add("abc");
set.add("tanzhou");
set.add("java");
set.add("xixi");
set.add("aaa");
for (Iterator it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}