集合类:一个容器,数组的长度固定不变,不灵活。
一、特点:
1、集合长度可以改变。集合只能存储对象,不能存储基本数据类型。
2、集合中可以存储任意类型对象,而数组不能。
二、集合框架的组成:
1、Collection是所有线性集合类的根接口。
2、Map接口:映射接口,存入键值对。
3、Iterator: 遍历集合的接口
三、Collection接口有3个子接口:
1、List接口:元素存取是有序不唯一,可存放重复元素。元素有下标
2、Set接口: 元素存取是无序唯一,不可以存放重复元素。元素无下标。
3、Queue: 队列,实现先进先出
四、Collection接口中的方法:
1、add() 添加元素 remove() 删除元素 isEmpty() 是否是空
2、size() 获得元素个数 toArray() 将集合转成数组
例:
public class Test {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("admin");
list.add("tom");
list.add("jerry");
list.remove(0);
System.out.println(list.size());
System.out.println(list.isEmpty());
}
}
//输出结果:
2
false
五、List接口常用的实现类:
1、ArrayList类:线程不安全,底层用数组实现。查询速度快,增删慢;初始容量10,接近10时会扩展,扩展成原来长度+原来长度/2;
(1)add(int index,元素):插入元素
(2)set(int index,元素):修改元素
(3)contains(Object obj): 判断元素是否存在
例:
public class Test {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("admin");
list.add("tom");
list.add("jerry");
list.add(1, "amy");
list.set(0, "viky");
System.out.println(list.contains("admin"));
for(String s:list) {
System.out.print(s+"\t");
}
}
}
//输出结果:
false
viky amy tom jerry
2、LinkedList类: 链表结构,增删快,查询慢
有addfirst、addlast、getfirst、getlast、removefirst、removelast等方法
public class Test {
public static void main(String[] args) {
LinkedList<String> links=new LinkedList<>();
links.addFirst("admin");
links.addFirst("tom");
links.addLast("jerry");
System.out.print(links+"\t");
System.out.println();
System.out.println(links.getFirst());
links.removeFirst();
System.out.print(links+"\t");
System.out.println();
System.out.println(links.getFirst());
}
}
//输出结果:
[tom, admin, jerry]
tom
[admin, jerry]
admin
3、Vector: 线程安全的,速度慢,底层使用数组实现,已被ArrayList替代
4、Stack: 先进后出,用数组实现,底层调用了Vector方法
(1)压入元素:push()
(2)取出元素:pop()
例:
public class Test {
public static void main(String[] args) {
Stack<String> stack=new Stack<>();
stack.push("aaa");
stack.push("bbb");
stack.push("ccc");
while(stack.size()>0) {
System.out.println(stack.pop());
}
}
}
//输出结果:
ccc
bbb
aaa
六、对集合遍历的方式:
1、使用普通For遍历
例:
public class Test {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("admin");
list.add("tom");
list.add("jerry");
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}
//输出结果:
admin
tom
jerry
2、使用增强For遍历
例:
public class Test {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("admin");
list.add("tom");
list.add("jerry");
for(String s:list) {
System.out.println(s);
}
}
}
//输出结果:
admin
tom
jerry
3、使用迭代器遍历
public class Test {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("admin");
list.add("tom");
list.add("jerry");
Iterator<String> iters=list.iterator();
while(iters.hasNext()) {
System.out.println(iters.next());
}
}
}
//输出结果:
admin
tom
jerry
七、Set接口: 无序唯一的接口
1、实现类:
(1)HashSet: 无序唯一,线程不安全,存放速度快;内部用HashCode保存元素位置,是查询速度最快的集合
例:
public class Test {
public static void main(String[] args) {
Set<String> sets=new HashSet<>();
sets.add("admin");
sets.add("tom");
sets.add("jerry");
for(String s:sets) {
System.out.print(s+"\t");
}
System.out.println();
System.out.println(sets.contains("jerry"));
}
}
//输出结果:
tom admin jerry (无序,可以别的顺序)
true
(2)TreeSet: 可以按照顺序排列。
(3)LinkedHashSet: 有顺序
例:
public class Test {
public static void main(String[] args) {
Set<String> sets=new LinkedHashSet<>();
sets.add("admin");
sets.add("tom");
sets.add("jerry");
for(String s:sets) {
System.out.print(s+"\t");
}
System.out.println();
System.out.println(sets.contains("jerry"));
}
}
//输出结果:
admin tom jerry
true
八、Map接口: 将键K映射到值V的对象。
K不能重复、V可以重复;没有继承自Collection
1、Map接口的实现类:
(1)HashMap: 线程不安全,速度快,允许存放Null键,null值
(2)LinkedHashMap: 继承HashMap, 有序的,通过链表实现
(3)Hashtable: 线程安全,速度慢,不允许存放Null键,null值
(4)TreeMap: 可以对键排序
2、Map接口中的方法:
put(K key,V value): 添加元素
clear(): 清空元素
remove(K key): 移除元素
containsKey(Object key): 判断元素是否存在
containsValue(Object value): 判断值是否存在
get(Object key): 获取元素
Set<K> keySet(): 获得key集
Collection values() : 返回值的集合
例:
public static void main(String[] args) {
LinkedHashMap<String,String> maps=new LinkedHashMap<>();
maps.put("china", "中国");
maps.put("USA", "美国");
Set<String> set=maps.keySet();
for(String s:set) {
System.out.println(s+" "+maps.get(s));
}
Collection<String> cs=maps.values();
for(String s:cs) {
System.out.println(s);
}
}
//输出结果:
china 中国
USA 美国
中国
美国
3、Properties: 继承于HashTable 对属性文件进行操作的类
常用方法:
setProperty(String key,String value):设置属性
getProperty(String key): 获得属性
load(): 加载属性文件