一、Java集合概述,关系如下图1-1所示
图 1-1
二、collection集合
主要方法:集合中的很多方法都需要重写集合中对象的equals方法才能实现,例如移除某个元素,需要通过equals方法进行比较是不是这个元素或者这个集合中是否包含这个元素
1、Add(Object o):添加个对象带集合里
2、AddAll(Collection coll):添加一个集合到集合里
3、Clear():清空集合
4、Remove(Object o):移除集合里的一个对象
5、removeAll(Collection coll):移除集合里的一组元素
6、ramainAll(Collection coll):保留coll中非元素,其余均移除
遍历:Collection无法获取指定元素,但是可以进行遍历,遍历有两种方法
1、可以通过增强的for循环遍历
2、也可以通过Iterator来遍历,需要通过collection的Iterator()先获取这个接口的对象,然后通过判断HasNext()和Next()方法来通过while方法来依次获取collection集合中的元素
工具方法:
1、isEmpty()
2、contaionsAll(Collection coll)
3、toArray()
4、toArray(T [] a)
三、Set
hashSet
1、HashSet是set的最典型实现
2、 HashSet中不能有重复的元素,判定两个元素是否重复的标准是:equals()方法返回ture
3、无序:HashSet是根据hashCode()来存放值,所以不能保证顺序
4、如果两个对象的equals方法返回时ture那么两个对象一定相等
5、HashSet是线程不安全的
linkedHashSet
1、是HashSet的子类
2、根据元素的Hashcode的值决定元素存储的位置,但同时也用链表来维护顺序
3、插入效率略低于HashSet,但是迭代查询时有很好的性能
4、不允许插入重复的元素
四、TreeSet
1、默认排序
//创建SET
TreeSet ts = new TreeSet();
//输入学生信息
Scanner scan = new Scanner(System.in);
for(int i=0;i<5;i++){
System.out.println("student ["+(i+1)+"]name:");
String stuName = scan.next();
System.out.println("student ["+(i+1)+"]score:");
int stuScore = scan.nextInt();
ts.add(new Student(stuName, stuScore));
}
//遍历打印学生信息
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
注意事项:student 类需要实现Comparable接口 需要重写compareTo(Object o)方法
2、定制排序
//创建Comparator 接口的对象,并利用匿名内部类对里面的方法进行重写
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Student1 && o2 instanceof Student1){
Student1 s1 = (Student1) o1;
Student1 s2 = (Student1) o2;
return s1.getScore()-s2.getScore();
throw new ClassCastException("类型转换异常");
}
};
//定义TreeSet,传入compare对象
TreeSet ts = new TreeSet(comparator);
//输入学生信息
//遍历学生信息
注意:这种方法则Student1中不用重写任何方法,直接只有对象,构造方法,和get set方法就可以了
五、List
1、List允许放重复的数组,可以看成是可以变长的数组,对应数组的下标中存放的各个元素在内存中的地址,如图1-2所示
图 1-2
2、有ArrayList 和vector 前者是线程不安全的,后者是线程安全的,但是还是建议用Arrylist,因为vector实在是太古老的(在jdk1.0时的)
3、Arrays.asList(Object ... args)返回的是一个list的对象,不是arraylist也不是vector;这是一个不定长参数的方法;返回的list是一个只读list
4、什么是不定长参数的方法:
jdk1.5后允许有;
用三个...放在形参类型和形参名字之间;
不定长形参只能在函数的最后一个参数的位置上;
调用包含一个可变形参的方法时,可以为该形参传入多个参数或者一个数组,不传入任何参数也可以;
能匹配定长的方法,那么优先匹配定长的方法,含有不定参数的重载方法最后匹配; Main方法的参数是一个数组类型,也可以改成一个可变参数类型;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
六、
一Map
1、Map 用于保存具有映射关系的数据,即保存键值对的集合,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value
2、 Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 Key 不允许重复,即同一个 Map
3、对象的任何两个 Key 通过 equals 方法比较中返回 false
4、Key 和 Value 之间存在单向一对一关系,即通过指定的Key 总能找到唯一的,确定的 Value
5、常用方法:
//boolean containsKey(Object key)
//boolean containsValue(Object value)
//Set KeySet():返回key对应的集合,Set类型
Collection keys = map.keySet();
System.out.println(keys.toString());
//Collection<?> values():返回value对应的集合
Collection values = map.values();
System.out.println(values.toString());
二HashMap和HashTable是map接口的两个典型的实现类,存在一些区别:
HashTable很古老,不建议使用
HashTable是线程安全的,HashMap是线程不安全的
HashTable不允许使用null来做key和value,而HashMap允许
HashSet与HashMap:
1)在HashSet中维护了一个HashMap的属性
2)在操作HashSet的方法时实际上是操作的HashMap的方法(包括add或者contain的方法等)
三linkedHashMap和linkedHashSet几乎一样;linkedTreeMap和linkedTreeSet几乎一样;
四 Propreties
1、Properties对应.properties属性文件
2、properties属性文件对应的是键值对,键值对的类型对应的都是
@Test
public void testProperties() throws IOException {
//在src下创建file文件,命名为jdbc.properties
//读取jdbc.properties
//1、创建properties对象
Properties p = new Properties();
//2、调用properties的load()方法加载属性文件的输入流
InputStream intstr = TestProperties.class.getClassLoader().getResourceAsStream("jdbc.properties");
p.load(intstr);
//3、调用getProperty(String key)的方法获取属性值
String user = p.getProperty("user");
System.out.println(user);
}
五、Collections
Collections是一个操作Set Map List 等集合的工具类,主要有以下几个作用:
1、获取线程安全的集合对象
/**
* ArrayList HashSet HashMap 都是线程不安全的
* 如何获得一个线程安全的对象?
* 调用Collections对象的synchronizedXxx()方法获取线程安全的集合
*/
List list = new ArrayList();
List list2 = Collections.synchronizedList(list);
2、排序
Collections.sort(list3, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
}
});
3、获取集合中最小的元素(要求集合中的都实现comparable接口)
六、Enumeration(StringTokenizer是Enumeration的子类)
Enumeration enumeration = new StringTokenizer("a,b,c,d,e");
while(enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}
还可以通过HashTable来获取Enumeration 如下:
Hashtable hashtable = new Hashtable();
hashtable.put("A", 1);
hashtable.put("B", 2);
hashtable.put("C", 3);
Enumeration enumeration = hashtable.elements();