Java进阶总结——集合框架
1.集合——List
1.1.Vector
/**
* Vector 向量
* 1.底层实现是数组
* 2.实现了list接口
* 3.list接口 有序的,可以重复,可以有null值
* 4.支持多线程
* */
在JDK2之前(在Java的集合框架之前),要存储多个数据,此时存在一个叫Vector类.
Vector类底层其实就是一个Object数组,Vector类中的方法是支持同步(方法使用synchronized修饰)的.
package day19.collection;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args) {
//初始化一个Vector对象
Vector<String> v=new Vector<String>();
//添加数据
v.add("qqq");
v.add("aas");
v.add("vfds");
v.add("qwas");
v.add("sadaz");
//在指定位置添加数据
v.add(1,"qpl");
//将集合中的元素添加到当前集合中
Vector<String>v1=new Vector<String>();
v1.add("111");
v1.addAll(v);
v1.addElement("尾部添加");
//修改元素
v1.set(0, "尊");//修改指定位置的元素
v1.setElementAt("林子", 2);
//查询
System.out.println("根据下标查询指定元素 "+v1.get(0));
System.out.println("根据内容返回第一次出现的索引 "+v1.indexOf("林子"));
System.out.println("根据内容返回最后一次出现的索引 "+v1.lastIndexOf("qpl"));
System.out.println("判断是否包含指定元素 "+v1.contains("尊"));
System.out.println("返回第一个位置的元素 "+v1.firstElement());
System.out.println("最后一次 "+v1.lastElement());
//删除元素
v1.remove(3);//根据索引删除元素
v1.remove("111");//根据元素删除,只删除第一次出现的元素
//遍历向量
System.out.println("遍历--------------------------");
System.out.print("[");
for (String string : v1) {
System.out.print(string+"\t");
}
System.out.println("]");
//枚举迭代器
//将向量转换成Enumeration对象
System.out.println("枚举-------------------");
Enumeration<String>enums=v1.elements();
while (enums.hasMoreElements()) {//判断枚举对象中是否有更多元素
String string = (String) enums.nextElement();//返回下一个元素
System.out.println(string);
}
//截取字序列
List<String>list=v1.subList(2, 5);
System.out.println("截取---------");
System.out.println(list);
}
}
输出结果:
1.2ArrayList
/**
* ArrayList
* 1.底层由数组实现
* 2.有序的
* 3.允许重复
* 4.允许有null
* 5.不支持同步
* */
package day19.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
class Student{
String name;
public Student() {
// TODO 自动生成的构造函数存根
}
public Student(String name) {
this.name=name;
}
}
public class ArrayListDemo {
public static void main(String[] args) {
//初始化一个对象
ArrayList<String>list=new ArrayList<String>();//创建一个空的对象
//添加
list.add("qww");//在尾部添加一个元素
list.add("1qe");
list.add("2rr");
list.add("zzss");
list.add(null);
list.add(2, "快快快");//在指定位置添加
System.out.println(list.toString());
//修改,指定位置
list.set(0, "尊");
//删除
list.remove(3);//删除指定位置的元素
list.remove("2rr");//删除列表中指定首次出现的元素
System.out.println(list.toString());
Vector<String>v=new Vector<String>();
v.add("1qe");
v.add("hh");
//list.removeAll(v);//删除两个集合中相等的元素 删除交集
//list.clear();//删除全部
System.out.println(list.toString());
//查询
System.out.println("通过下标取值==="+list.get(1));
System.out.println("通过元素查找第一次出现的索引==="+list.indexOf("尊"));
System.out.println("通过元素查找最后一次出现的索引==="+list.lastIndexOf("尊"));
System.out.println("判断是否包含指定元素"+list.contains("hh"));
System.out.println("判断是否为空列表"+list.isEmpty());
//获取所有元素
for (String str : list) {
System.out.print(str+" ");
}
System.out.println();
//方法二
for (int i = 0; i < list.size(); i++) {
String string = list.get(i);
System.out.print(string+" ");
}
System.out.println();
//修改指定内容的元素
System.out.println("写修改----------");
for (int i = 0; i < list.size(); i++) {
String string = list.get(i);
if (string==null) {
continue;
}if (string.equals("尊")) {
list.set(i,"zjsz");
}
}
System.out.println(list.toString());
//删除指定元素
//初始化对象
ArrayList<Student>list1=new ArrayList<Student>();
list1.add(new Student("qq"));
list1.add(new Student("qqa"));
list1.add(new Student("qqz"));
//遍历成员
for (Student student : list1) {
System.out.print(student.name+" ");
}
System.out.println();
//删除指定元素
//list.remove();
System.out.println("删除---------------");
/*for (int i = 0; i < list1.size(); i++) {
Student student=list1.get(i);
if (student==null) {
continue;
}if (student.name.equals("qqz")) {
list1.remove(i);
}
}*/
//foreach遍历删除
for (Student student : list1) {
//判断内容是否相等
if (student==null) {
continue;
}
//判断name
if (student.name.equals("qqa")) {
//list.remove(student);//无法删除
}
}
//通过迭代器
//1.获取迭代器对象
Iterator<Student>it=list1.iterator(); //迭代器是一个副本
boolean result=it.hasNext();//判断迭代器中是否还有更多的元素
//取出下一个元素
/*Student stu1=it.next();//每调用一次next就取出一个元素
System.out.println("name==="+stu1.name);*/
for (; it.hasNext();) {
Student stu1 = it.next();
System.out.println("name==="+stu1.name);
//删除元素
if (stu1!=null) {
if (stu1.name.equals("qq")) {
it.remove();//删除当前指针指向的对象
}
}
}
//查看
for (Student student : list1) {
System.out.print(student.name+" ");
}
}
}
输出结果:
1.3LinkedList
/**
* Linked特点实现了Deque、list接口的特性
* 1.底层由链表实现 双向链表
* 2.有序的
* 3.允许重复
* 4.允许有null
* 5.具有队列和栈的特点
* 6.不支持同步
* */
package day19.collection;
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
//初始化一个LinkedList对象
LinkedList<String>list=new LinkedList<String>();
//添加
list.add("浪子一秋");
list.add("一叶知秋");
list.add("葬剑山庄");
list.add("爱情公寓");
list.addFirst("落梅拂雪");//在头部添加
list.addLast("清风明月");//在尾部添加
list.push("呆萌师傅");//压栈,从入口放一个,头是栈顶
System.out.println(list.offer("独步天下"));//在尾部添加一个元素
System.out.println(list.offerFirst("武林至尊"));//在头部添加一个元素
System.out.println(list.offerLast("东方不败"));//在尾部添加一个元素
//list.pop();//出栈
System.out.println(list.toString());
//修改
list.set(6, "一醉千年");
System.out.println(list.toString());
//查询
String element=list.poll();//取出head元素,同时删除元素
System.out.println(element);
System.out.println(list.pollFirst());
System.out.println(list.getFirst());//取出第一个元素不删除
System.out.println(list.getLast());//取出最后一个元素
System.out.println(list.element());//取出第一个元素,不删除
System.out.println(list.get(2));//返回指定位置元素
System.out.println(list.indexOf("东方不败"));//首次出现元素的索引
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string+" ");
}
System.out.println(list.toString());
//删除
list.remove();//删除头
list.remove(1);//通过索引删除
list.remove("清风明月");//删除首次出现的元素
System.out.println(list.toString());
//遍历删除必须使用迭代器
}
}
输出结果:
2.集合——Set
2.1HashSet
/**
* HashSet特点
* 1.元素是无序的
* 2.不允许有重复的
* 3.只允许一个null
* 4.不支持同步
* */
package day19.collection;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args) {
// 1.创建HashSet对象
HashSet<String>set=new HashSet<String>();
//添加
set.add("夜尽天明");
set.add("夜尽天明");
set.add(new String("夜尽天明"));
set.add("诸子百家");
set.add("君临天下");
set.add(null);
System.out.println(set.toString());
//删除
set.remove(null);
//set.clear();//清空
System.out.println(set.toString());
//查看元素
System.out.println(set.size());//查看元素个数
System.out.println(set.isEmpty());//判断是否为空
System.out.println(set.contains("诸子百家"));//查看是否包含
//查看所有元素
for (String string : set) {
System.out.println(string);
}
//通过迭代器
//获取迭代器对象
System.out.println("迭代器------------");
Iterator<String>it=set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.println(string);
//如果遍历删除,必须使用迭代器
it.remove();
}
System.out.println(set.isEmpty());
}
}
输出结果:
2.2TreeSet
/**
* TreeSetDemo特点
* 1.不允许有null
* 2.不允许有重复元素
* 3.添加的顺序是无序的
* 4.内容可以排序
* */
package day19.collection;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
//初始化一个TreeSet对象
TreeSet<Integer>set=new TreeSet<Integer>();
//添加
set.add(13);
set.add(11);
set.add(18);
set.add(6);
set.add(3);
//set.add(null);//不允许有null
//查看
System.out.println(set.contains(1));//是否包含指定的元素
System.out.println(set.isEmpty());//判断是否为空
System.out.println(set.size());//大小
System.out.println(set.first());//返回最小的元素
System.out.println(set.last());//返回最大的元素
System.out.println(set.lower(10));//以某个值为基准,返回小于该元素的临近数
System.out.println(set.higher(11));//返回临近的大数
System.out.println(set.toString());
//删除
System.out.println("删除-----------------");
set.remove(3);
System.out.println(set.pollFirst());//获取删除最小元素
System.out.println(set.pollLast());//大
System.out.println(set.toString());
//获取所有元素
System.out.println("foreach-----------------");
for (Integer integer : set) {
System.out.println(integer);
}
//迭代器
System.out.println("迭代器---------------------");
for (Iterator iterator = set.iterator(); iterator.hasNext();) {
Integer integer = (Integer) iterator.next();
System.out.println(integer);
}
}
}
输出结果:
4.知识框架