List集合和Set集合
collection:无序、可重复的一组数据
List:有序、可重复
ArrayList:底层是可变数组,遍历元素更快,改变值也就更快
LinkedList:底层是双向链表,插入、删除更块
Set:无序、不可重复
Map:实现一一对应(Entry)
HashMap
1、set中存放的是无序,唯一的数据
2、set不可以通过下标获取对应位置的元素的值,因为无序的特点
3、使用treeset底层的实现是treemap,利用红黑树来进行实现
4、设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,比较的是地址
5、树中的元素是要默认进行排序操作的,如果是基本数据类型,自动比较,如果是引用类型的话,需要自定义比较器
比较器分类:
内部比较器
定义在元素的类中,通过实现comparable接口来进行实现
外部比较器
定义在当前类中,通过实现comparator接口来实现,但是要将该比较器传递到集合中
注意:外部比较器可以定义成一个工具类,此时所有需要比较的规则如果一致的话,可以复用,而
内部比较器只有在存储当前对象的时候才可以使用
如果两者同时存在,使用外部比较器
当使用比较器的时候,不会调用equals方法
实例讲解:
News类:
public class News implements Comparable<News>{
private int newsId;
private String title;
private String creator;
@Override
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 News() {
}
public News(int newsId, String title, String creator) {
this.newsId = newsId;
this.title = title;
this.creator = creator;
}
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;
}
@Override
public String toString() {
return "News{" +
"newsId=" + newsId +
", title='" + title + '\'' +
", creator='" + creator + '\'' +
'}';
}
}
TestNews类:
public class TestNews {
// News[] allNews = new News[10];
// //一旦超过了,就需要数组扩容
// //一旦过少,就需要截去多余的部分
public static void main(String[] args) {
ArrayList 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.get(0));//根据下标查找元素
// newsList.set(0,1);//根据下标修改元素
// System.out.println(newsList.get(0));
newsList.add(news1);
newsList.add(news2);
newsList.add(news3);
newsList.add(news4);
//指定插入到已插入元素的位置,则后面所有的元素后移
newsList.add(4,"我是打酱油的");
System.out.println(newsList.size());
// if(newsList.contains("abc"))
// newsList.remove("abc");
newsList.remove(1);
int index = newsList.indexOf("我是打酱油的");
// 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);
// i ++;
// }
//迭代器遍历
// Iterator itr = newsList.iterator();
// while(itr.hasNext()){
// System.out.println(itr.next() + "!!!");
// }
newsList.sort(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof News && o2 instanceof News){
News n1 = (News) o1;
News n2 = (News) o2;
return n2.getNewsId() - n1.getNewsId();
}
return 0;
}
});
// System.out.println(index);
System.out.println(newsList);
}
}
TestLink类:
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);
}
ArrayList arr = new ArrayList();
arr.addAll(list);
}
}
TestSet类:
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);
if(set.contains("abc")){
set.remove("abc");
}
// System.out.println(set.size());
// for (Object o : set) {
// System.out.println(o);
// }
Iterator itr = set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}