Java集合框架体系结构
默认的一个数组 8
Iterator迭代器
collection:无序、可重复的一组数据
List:有序、可重复
List:ArrayList:底层是可变数组(线性表),遍历元素更快,改变值也就更快
LinkedList:底层是双向链表(在有他自己本身之外再加上他下一个),插入、删除更快
Set:无序、不可重复
collection、List、Set都是接口,全部都位于java.util包里
Map:实现一一对应(Entry)
HashMap
在实现对抽象类和接口实例化的时候,没有类名,但实现了和类一样的功能
私有静态类 node
News:
package cn.kgc.kb09;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/28 14:16
* @Description:id、名称、创建者
**/
public class News implements Comparable<News>{
private int newsId;
private String title;
private String creator;
@Override
//给后面collection的sort使用的
public int compareTo(News o) {
if(o instanceof News){
News obj=(News)o;
//自定义比较规则
//return obj.newsId-this.newsId;//降序,当前的在后就叫降序
return this.newsId-obj.newsId;//升序,当前的在前就叫升序
}
return 0;
}
public int getNewsId() {
return newsId;
}
public void setNewsId(int newsId) {
this.newsId = newsId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public News(int newsId, String title, String creator) {
this.newsId = newsId;
this.title = title;
this.creator = creator;
}
@Override
public String toString() {
return "News{" +
"newsId=" + newsId +
", title='" + title + '\'' +
", creator='" + creator + '\'' +
'}';
}
}
TestNews:
package cn.kgc.kb09;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/28 14:18
* @Description:假定用数组来存储,元素个数不确定,需要用集合
**/
public class TestNews {
//News[] allNews=new News[10];
//一旦超过了,就需要数组扩容
//一旦过少,就需要截去多余的部分
public static void main(String[] args) {
ArrayList<News> newsList = new ArrayList<>();
News news1=new News(1,"李小璐与PGOne不得不说的故事","sam");
News news2=new News(2,"川建国同志的卧底生涯","sam");
News news3=new News(3,"克林顿在白宫中对莱文斯基唱诗","sam");
News news4=new News(4,"kb09就业平均薪资达到2W","sam");
/* newsList.add(news);//在集合中增加元素
System.out.println(newsList.size());
newsList.remove(news);//在集合中删除元素
System.out.println(newsList.size());
newsList.add(news);
System.out.println(newsList.size());
System.out.println(newsList.get(0));//根据下标查找元素
//newsList.set(0,1);//根据下标修改元素*/
newsList.add(news1);
newsList.add(news2);
newsList.add(news3);
newsList.add(news4);
System.out.println(newsList.size());
//遍历的3种方式
//fori
/*for (int i = 0; i < newsList.size(); i++) {
System.out.println(newsList.get(i));
}*/
//增强for遍历
/*int i=1;
for(Object obj:newsList){
System.out.println("第"+i+++"条"+obj);
}*/
//原来有多少个往后面加一个可以,但不能跳着来,正常是在前面插入的时候使用
//newsList.add(1,news3);现有的元素向后移动一位
//指定插入到已插入元素的位置,则后面的所有元素后移
newsList.add(4,news3);
if(newsList.contains("abc")){
newsList.remove("abc");//不存在的情况,并没有报错,所以一般与contains配合使用
}
newsList.remove(1);//往往与indexof一起使用
//根据对象来找索引,也不是很常用
int i = newsList.indexOf(news3);
//removeAll是和一个别的集合比较,如果包含就全部抹掉相同的元素
//subList取子集合,左闭右开,如果2~3 就只拿2 返回一个子集合
//toArray把底层的数组扔回来 toArray(Object[])指定扔到那个数组里
//toString比较有用!
//clear清空
//迭代器遍历
/*Iterator itr=newsList.iterator();
while(itr.hasNext()){
System.out.println(itr.next()+"!!!");
}*/
System.out.println(newsList.toString());
newsList.sort(new Comparator<News>() {
@Override
public int compare(News o1, News o2) {
if(o1 instanceof News && o2 instanceof News){
News n1=(News) o1;
News n2=(News) o2;
return n1.getNewsId()-n2.getNewsId();//如果n1比n2大,就会倒序排列
}
return 0;
}
});
System.out.println(newsList);
}
}
TestLink:
package cn.kgc.kb09;
import java.util.*;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/28 15:53
* @Description:
**/
public class TestLink {
public static void main(String[] args) {
LinkedList list=new LinkedList();
News news1=new News(1,"李小璐与PGOne不得不说的故事","sam");
News news2=new News(2,"川建国同志的卧底生涯","sam");
News news3=new News(3,"克林顿在白宫中对莱文斯基唱诗","sam");
News news4=new News(4,"kb09就业平均薪资达到2W","sam");
list.add(news1);
list.addLast(news2);
list.addFirst(news3);
list.add(news4);
list.remove();//等同于removeFirst();
list.element();//获取它的第一个元素getFirst();
list.offer(1);//等同于add(1);
list.peek();//等同于getFirst(); 如果当前为空就返回空
list.poll();//弹出首元素,相当于removeFirst();
list.pop();//等同于removeFirst
list.push("abc");//等同于addFirst();
for (Object o : list) {
System.out.println(o);
}
//实现了从LinkedList转成ArrayList
ArrayList arr=new ArrayList();
arr.addAll(list);
}
}
TestSet:
package cn.kgc.kb09;
import java.util.HashSet;
import java.util.Iterator;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/28 16:26
* @Description:
**/
public class TestSet {
public static void main(String[] args) {
HashSet set=new HashSet();
set.add(1);
set.add("abc");
set.add("hello");
set.add(1);
set.add("abc");
set.add(2);
System.out.println(set.size());
if(set.contains("abc")){
set.remove("abc");
}
//set一般来说只用来做查看,去重,addAll把另外一个list拿进来,把重复数据扔掉了
//不满足输入顺序的就叫做无序,默认是按照hashcode排序的
/*for (Object o : set) {
System.out.println(o);
}*/
Iterator itr = set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
TestTree:
package cn.kgc.kb09;
import java.util.TreeSet;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/28 17:07
* @Description:
**/
public class TestTree {
public static void main(String[] args) {
TreeSet set=new TreeSet();
set.add(4);
set.add(3);
set.add(2);
set.add(1);
System.out.println(set);
for (int i = 0; i < set.size(); i++) {
}
}
}