JAVA集合

本文详细介绍了Java集合框架中的主要接口和实现类,包括Collection、List、Set等接口的特点及其实现类如ArrayList、LinkedList、HashSet、TreeSet的区别与使用场景,并提供了基本的增删改查操作示例。
摘要由CSDN通过智能技术生成

1.Collection接口

public interface Collection<E> extends Iterable<E> {  
     public int size();//集合元素的个数
     public boolean isEmpty();//集合是否为空
     public boolean contains(Object obj);//包含指定元素
     public Iterator<E>  iterator();//获取集合的迭代器
     public Object[]  toArray();//把集合转为对象数组
     public void  add(E);//添加元素的方法
     public void remove(Object);//删除指定元素
     public void clear();//清空集合所有元素
     public Spliterator<E> spliterator();//新的迭代器
     public Stream  stream();//获取去流
     public Stream<E> parallelStream();//获取并行流    
}

2.List接口

特点:
	有序,有下标,可以重复
常见的两个实现类:
	ArrayList  LinkedList
ArrayList是基于数组,LinkedList是基于双向链表
LinkedList增删快
ArrayList查询修改快
简单的增删改查:
	public static void main(String[] args) {
		ArrayList  list = new ArrayList();
		//增删改查
		list.add(888.0);
		list.add(999);
		list.add(1, 666);//
		list.set(1, 333);//改
		list.remove(0);//通过下标删除
		list.remove((Integer)666);//删除Integer类型需要强转,不然会识别为下标
		list.remove(888.0);
		for(int i=0;i<list.size();i++) {
			System.out.println(list.get(i));
		}
        for(Object num:list) {
			System.out.println(num);
		}
		System.out.println(list.toString());
	} 

泛型

限制数据类型
	ArrayList<Integer> list = new ArrayList<>();

3.Set接口

3.1 HashSet类
无序无下标,不能重复
	判断两个对象是否重复:
		hashCode判断是否再同一个桶中,在同一个桶中,通过equals判断是不是同一个对象
3.2 TreeSet
TreeSet的底层是一个平衡二叉树
	有两种排序:
		自然排序:
			让放进集合中对象实现Comparable接口---重写compareTo方法
		自定义排序:
			TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {				
				return o1.getAge()-o2.getAge();
				}
   			 });
			可以两个都写,自定义排序优先
			ts.add(new Student("张三丰",20));
             ts.add(new Student("宋远桥",16));
             ts.add(new Student("俞岱岩",15));
             ts.add(new Student("张翠山",16));
             ts.add(new Student("宋远桥",16));
             System.out.println(ts);
3.3 LinkedHashSet
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("adfda");
set.add("dfafd");
set.add("dewqr");
set.add("utiu");
set.add("fdaf");
System.out.println(set);

4. 迭代器

单值集合都有迭代器
Iterator<String> itor = set.iterator();
while(itor.hasNext()) {
	System.out.println(itor.next());
}
反向迭代器
ListIterator<Worker> lit = workers.listIterator(workers.size());
while(lit.hasPrevious()) {
	Worker worker = lit.previous();
	if(worker.getName().equals("李四")) {
		lit.add(new Worker("赵六",33,10000,7));
	}
	if(worker.getName().equals("王五")) {
		lit.remove();
	}
}

5.Map接口

Map:映射
	key---value 键值对
public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();
		//增
		map.put("cn", "China");
		map.put("us", "America");
		map.put("jp", "Japan");
		map.put("fr", "France");
		//修改
		map.put("jp", "jjj");
		//删
		map.remove("jp");
		map.remove("jp", "jjj");//为了安全
		System.out.println(map);
		
		//循环键---最常用
		Set<String> keySet = map.keySet();
		for(String k:keySet) {
			System.out.println(k+"-"+map.get(k));
		}
		//循环值
		Collection<String> values = map.values();
		for(String v:values) {
			System.out.println(v);
		}
		//循环键值对
		Set<Entry<String, String>> es = map.entrySet();
		for(Entry<String, String> kv:es) {
			System.out.println(kv.getKey()+" "+kv.getValue());
		}
		System.out.println("-----------------------------------");
		//迭代器实现键值对的遍历
		Iterator<Entry<String, String>> itor = es.iterator();
		while(itor.hasNext()) {
			Entry<String, String> kv = itor.next();
			System.out.println(kv.getKey()+" "+kv.getValue());
		}
}
//输入一个字符串,统计所有字母出现的次数,(位置--扩展)
String str = "kdjflksajlkfjalkjfalkjflkajlkfjlkafhkah";
//出现次数
public class TestString {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
		System.out.print("请输入字符串:");
		String str = input.next();
		for (int i = 0; i < str.length(); i++) {
			System.out.print(str.charAt(i)+"-");
			char ch = str.charAt(i);
			Integer count = 0;
			if(hm.containsKey(ch)) {
				count = hm.get(ch);
				count++;
				hm.put(ch,count);
			}else {
				hm.put(ch, 1);
			}
		}

		System.out.println(hm);
	}
}	
//出现的下标
public class TestString {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		HashMap<Character, List<Integer>> hm = new HashMap<>();//找下标
		System.out.print("请输入字符串:");
		String str = input.next();
		for (int i = 0; i < str.length(); i++) {
			System.out.print(str.charAt(i)+"-");
			char ch = str.charAt(i);
			//Integer count = i;
			if(hm.containsKey(ch)) {
				hm.get(ch).add(i);
			}else {
				hm.put(ch,new ArrayList<Integer>());
				hm.get(ch).add(i);
			}
		}
		System.out.println(hm);
	}
}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值