1 package test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator; import org.junit.Test;
public class TestCollection {
@Test
public void test1(){
Collection<Object> coll = new ArrayList<>();
//1,向定义的集合中添加元素:coll.add();
coll.add("aa");
coll.add(123);
coll.add(new Date());
System.out.println(coll.toString()); //2:向一个集合中加入另一个集合的全部元素:coll1.addAll(coll);
Collection<Object> coll1 = new ArrayList<>();
coll1.add(520);
coll1.add("zhaoning");
coll1.addAll(coll);
System.out.println(coll1.toString()); //3:计算一个集合内有几个元素: coll1.size();
// Collection coll2 = new ArrayList();
// coll2.contains("zhaoning");
int lenght = coll1.size();
System.out.println(lenght); //4:清空集合内部的元素:coll.clear();
coll.clear();
System.out.println(coll.toString());
} @Test
public void test2(){
//5:判断集合是否为空:c1.isEmpty();判断集合c1是否为空,返回值为布尔值,如果为空返回true,不为空则返回false;
Collection<Object> c1 = new ArrayList<>();
boolean i = c1.isEmpty();
System.out.println(i);
c1.add(520);
i = c1.isEmpty();
System.out.println(i); //6:移除集合中某个元素:c1.remove(520);删除c1中 520 元素;
c1.add("zhaoning");
c1.remove(520);
System.out.println(c1.toString()); //7:移除集合中某个元素:c1.removeAll(c2);删除c1中 包含c2集合的全部 元素;
Collection<Object> c2 = new ArrayList<>();
c2.add("zhaoning");
c1.removeAll(c2);
//8:判断集合是否包含某个元素:c2.contains(520);判断集合是否包含元素520,返回值为布尔值,如果包含返回true,否则返回false;
c2.clear();
c2.add("zhaoning");
c2.add(520);
c2.add(1314);
System.out.println(c2.contains(520)); //9:判断一个集合是否包含另一个集合所有元素:c2.containsAll(c1): 判断集合c2是否包含集合c1的全部元素,返回值为布尔值,
// 如果包含返回true,否则返回false;
boolean b = c2.containsAll(c1);
System.out.println(b);
} @Test
public void test3(){
//10:讲一个集合元素数组的形式呈现:c3.
Collection<Object> c3 = new ArrayList<>();
c3.add("zyn");
c3.add("girl");
Date d1 = new Date();
c3.add(d1);
c3.add("girl");
c3.add("zyn");
// Object[] obj = c3.toArray();
// for(int i = 0; i < obj.length; i++){
// System.out.println(obj[i]);
// } //11:迭代器:iterator
Iterator it = c3.iterator();
while(it.hasNext()){
System.out.println(it.next());
} System.out.println(); //12:比较两个集合的元素是否相同:c4.equals(c3) :返回值为布尔值,相同为true,不同为false;
Collection<Object> c4 = new ArrayList<>();
c4.add("zyn");
c4.add("girl");
Date d2 = new Date();
c4.add(d2);
boolean b1 = c4.equals(c3);
it = c4.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println(b1);//b1 = false的原因:new 的时间不一样,存在毫秒差距;
System.out.println(d2.getTime() - d1.getTime());
} @Test
public void test4(){
//13:计算一个集合的hash值:c5.hashCode(); 返回值是一个int型值
Collection<Object> c5 = new ArrayList<>();
System.out.println(c5.hashCode());
} @Test
public void test5(){
//来验证两个集合的元素完全相同,但是顺序不同,用equals()比较是否相等:
Collection<Object> cc = new ArrayList<>();
Collection<Object> cd = new ArrayList<>();
//cc.add("zhaoning");
cc.add("zyn");
cc.add("and");
//cc.add("zyn");
cc.add("zhaoning");
cd.add("zyn");
cd.add("and");
cd.add("zhaoning");
System.out.println(cc.equals(cd)); /*
* 总结:两个集合元素相同,但是元素顺序不同,用equals()比较是不相同的;
*/
}
}

对于TreeSet 和TreeMap来说,要想规定向集合中添加同一种元素并且自定义根据元素的某一个属性进行排序,就要继承Comparator类,重写compare()方法;或者是实现Comparable接口,重写compareTo()方法;

package collection;

import java.util.*;

import org.junit.*;
public class TestTreeSet {
@Test
public void test1(){
Set set = new TreeSet();
set.add(new Person("zhaoning",19));
set.add(new Person("zyn",20));
set.add(new Person("Aa",21)); Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
} @Test
public void test2(){
Comparator<?> com = new Comparator<Object>(){//实现定制排序重写compare()方法: @Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Customer && o2 instanceof Customer){
Customer c1 = (Customer)o1;
Customer c2 = (Customer)o2;
return c1.getId().compareTo(c2.getId());
}
return 0;
}
};
Set set = new TreeSet(com);
set.add(new Customer("zhaoning",00001));
set.add(new Customer("zyn",00002));
set.add(new Customer("Aa",00003)); Iterator it = set.iterator();
while(it .hasNext()){
System.out.println(it.next());
}
}
} package collection; public class Person implements Comparable<Object>{//实现Comparable接口:
private Integer age;
private String name; public Person(){
super();
}
public Person(String name,Integer age){
this.name = name;
this.age = age;
} public String getName(){
return this.name;
} public Integer getAge(){
return this.age;
} @Override
public int compareTo(Object o) {//重写compareTo()方法来自定义利用哪个元素进行排序:
if(o instanceof Person){
Person p = (Person)o;
return this.age.compareTo(p.age);
}
return 0;
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((age == null) ? 0 : age.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
} public String toString(){
return "Person : [ name:" + this.name + ", age:" + this.age + "]";
}
}

接口Collection: Set 和 List 两个子接口:

      List接口下实现的类有: ArrayList,Vector(老版本),LinkedList;(有序的)

      Set接口下实现的类有:HashSet 和 TreeSet;(无序的)

接口Map: 实现的类有HashMap,LinkedHashMap,TreeMap;

    

Java 集合类框架的更多相关文章

  1. Java集合类框架的基本接口有哪些?

    总共有两大接口:Collection 和Map ,一个元素集合,一个是键值对集合: 其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合: 而ArrayLis ...

  2. java集合类框架的基本接口有哪些

    集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以以他自己的方式对元素进行保存和排序.有的集合允许重复的键,有些不允许. java集合类里面最基本 的接口: Collection ...

  3. 夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. Java集合类框架的最佳实践有哪些

    根据应用的需要正确选择要使用的集合的类型对性能非常重要,比如:元素的大小是固定的,而且能事先知道,我们就应该用Array而不是ArrayList. 有些集合类允许指定初始容量.因此,如果我们能估计出存 ...

  5. Java集合类框架的最佳实践有哪些?

    1.根据应用需要正确选择要使用的集合类型对性能非常重要,比如:假如知道元素的大小是固定的,那么选用Array类型而不是ArrayList类型更为合适. 2.有些集合类型允许指定初始容量.因此,如果我们 ...

  6. Java集合类框架的最佳实践?

    根据应用的需要选择合适的集合对性能是非常重要的.如果一个集合的元素数量是固定的,而且我们能够提前知道固定的数量,那么就可以使用数组,而不是ArrayList. 每个集合都可以设置初始容量,如果我们提前 ...

  7. Java集合框架Collection

    转自:http://www.cdtarena.com/javapx/201306/8891.html [plain] view plaincopyprint?01.在 Java2中,有一套设计优良的接 ...

  8. java 集合类基础问题汇总

     1.Java集合类框架的基本接口有哪些? 参考答案 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有些不允许 ...

  9. Java中最常用的集合类框架之 HashMap

    一.HashMap的概述 HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构.      HashMap是基于哈希表的Map接口实现的,此实现提供所有可选的映射 ...

随机推荐

  1. java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat()

    Android调试openCV4Android的时候出现以下错误 java.lang.UnsatisfiedLinkError: No implementation found for long or ...

  2. [转] 一个小时学会Git

    一个小时学会Git http://www.cnblogs.com/best/p/7474442.html

  3. maven and jwt

    以目前浅薄的理解,jwt就是一种加密token的手段,这个token也只有自己能解开,如果客户端以cookie存这个token,可能会存在cookie被窃取的情况. 另外,jwt这中加密方式因为有过期 ...

  4. 01Hadoop二次排序

    我的目的: 示例: 2012,01,01,352011,12,23,-42012,01,01,432012,01,01,232011,12,23,52011,4,1,22011,4,1,56 结果: ...

  5. Linux下Qt Creator编辑器无法输入中文解决

    Ubuntu安装了搜狗输入法,在浏览器中可以使用,但是在Qt Creator中却无法输入中文. 解决办法: 执行sudo apt-get install fcitx-libs-qt5 该命令将库文件l ...

  6. postgresql某进程占用cpu资源过高,降不下来

    由于是开发阶段,所以并没有配置postgres的参数,都是使用安装时的默认配置,以前运行也不见得有什么不正常,可是前几天我的cpu资源占用突然升高.查看进程,发现有一个postgres的进程占用CPU ...

  7. 告别GOPATH,快速使用 go mod(Golang包管理工具)

    https://studygolang.com/articles/17508?fr=sidebar 文中的wserver为module名,route为本地的包名,go.mod所在的目录名不一定非要和m ...

  8. game 角色相关记录

    GameServer启动 (role, misc, mail, offline)从共享内存中加载数据到m_mBlob中如果共享内存没有则从DB加载 主要是修改了同步共享内存,共享内存同步数据库{//r ...

  9. 异步任务神器 Celery-入门

    一.Celery入门介绍 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务.比如,在 Web 开发中,对新用户的注册,我们通常会给他 ...

  10. sparksql udf自定义函数中参数过多问题的解决

    在进行spark sql数据库操作中,常常需要一些spark系统本身不支持的函数,如获取某一列值中的字符串. 如要获取 “aaaakkkkk”中的第4-第8个字符. 针对这种需求,只有设置UDF来实现 ...