【学习笔记】集合类

集合类:一个容器,数组的长度固定不变,不灵活。

一、特点:
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():  加载属性文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值