java基础语法-集合框架

一、集合的概念

集合是一种工具,容器,可以存储数量不等的若干对象 。代替数组。

二、Collection集合体系

Collection是一个接口

在这里插入图片描述

对于集合的学习都从4个方法:
1、集合的特点
2、集合的常用方法
3、集合的实现类
4、集合的遍历

三、Collection集合

Collection集合是能够存储任意的对象。java.util包

常用方法:
boolean add(Object o); //将o添加到指定的集合中
boolean addAll(Collection c);将 集合c 中的所有元素全部添加到指定集合中
void clear();清空集合中的所有元素
boolean contains(Object o);判断o是否在指定集合中
boolean contains(Collection c);判断指定集合是否包含c集合。
boolean isEmpty();判断此集合是否为空
boolean remove(Object o);将元素o从集合中移除
int size();返回此集合的长度

Collection集合是List|Set集合的父接口,那么Collection集合中的方法在List/Set集合中一定存在。
Collection没有直接的实现类。

四、List集合

a) 特点:可以存储任意类型的元素。元素有序,有下标,元素可以重复。
b) 方法:
除了Collection 集合中的方法之外,添加的都是有下标的方法。

List集合中常见的方法:
void add(int index,Object o);在指定的位置添加元素o。
Object get(int index); 获取指定位置的元素
int indexOf(Object o);返回元素o在集合中第一次出现的下标,如果不存在则返回-1
Object remove(int index);移除指定位置的元素并元素的值返回。

c)List集合的实现类 ArrayList (数组实现)
d)List集合的遍历(重点):
逐一访问集合中所有的元素。
i.下标遍历
ii.forEach()遍历 JDK1.5之后的遍历方式

e)List接集合的其他实现类
i.ArrayList :JDK1.2的类
特点:数组实现 (空间连续) 查询快,增删慢。线程不安全,运行效率高。
ii.LinkedList:
特点:链表实现(可能不连续) 查询慢 增删快。
iii.Vector
特点:数组实现 JDK1.0 线程是安全,运行效率低。

五、泛型集合

a)类型安全,一旦加上泛型之后,那么集合中只能存储一种类型的元素。
b)编译时自动检验,而不是运行时报错。
c)使用了泛型之后就不需要进行强转。
注意:一种类型的引用只可指向一种类型,不能出现多态。
泛型只能为引用类型

六、泛型类和泛型接口
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

七、Collections 工具类**(static修饰的方法)**

java.util.Arrays.sort()---->Array
java.util.Arrays.copyOf();----> Collection
Collections.sort(list);
将给定的集合中的元素进行升序排列(按照自然规则排序)
Collections.reverse(list);将集合中的元素进行倒置。
Collections.shuffle(list);将集合中的元素进行随机排列。

八、Set集合

a) 特点:可以存储任意类型的元素;无序,不下标,元素(内容)不可重复。
b)方法:只有从Collection集合中继承到的方法。
c)实现类:HashSet
d)遍历:
i.forEach遍历 (set集合没有下标,所有不能使用下标遍历的方式)

e)如何保证Set集合中不插入相同内容的对象
i.HashSet
在这里插入图片描述
1.保证相同对象返回相同的哈希码值,内容不同的对象尽量返回不同的哈希码值。
覆盖hashCode()
2.覆盖equals方法

覆盖hashCode()
	@Override
	public int hashCode(){
		return name.hashCode()+age;//  int [-2147483648~2147483647]
		//return 0;  所有对象返回的哈希码值都相同  那么以为都会调用equals()进行判断内容是否一致
		//return age;//保证相同对象的哈希码值相同
	}
	//覆盖equals()
	@Override
	public boolean equals(Object o){
		System.out.println("------------------------------------");
		//自反性  比较两者地址是否相同
		if(this == o)return true;
		//非空性  判断o引用是否为null
		if(o == null)return false;
		//一致性  判断两个对象的实际类型是否一致
		if(this.getClass() != o.getClass())return false;
		//强转  
		Student s = (Student)o;
		//判断  逐一判断对象中的内容相同
		if(this.name.equals(s.name) && this.age == s.age && this.score == s.score)return true;
		else return false;
	}

f)Set集合的实现类
i.HashSet
ii.LinkedHashSet:保证被插入的元素顺序不变
iii.TreeSet (SortedSet 的实现类 Set的子接口)
自动的对插入到集合中的元素进行排序。
数字|字母会按照自然排序的规则进行排序。
自定义的对象需要实现Coparable接口,覆盖其中COmparTo()方法,制定排序规则。

package set;
import java.util.TreeSet;

public class TestTreeSet {
	public static void main(String[] args) {
		TreeSet<Worker> set = new TreeSet<Worker>();
		set.add(new Worker("ligs",200.0));
		set.add(new Worker("xingy",249.0));
		set.add(new Worker("zhangw",249.0));
		set.add(new Worker("weisc",199.0));
		set.add(new Worker("weisc",199.0));
		set.add(new Worker("gaoj",20000.0));
		for (Worker w : set) {
			System.out.println(w);
		}
		/*TreeSet<String> set = new TreeSet<String>();
		set.add("DB");
		set.add("B");
		set.add("DE");
		set.add("A");
		set.add("E");
		for (String s: set) {
			System.out.print(s+"\t");
		}
		System.out.println();*/
	}
}
class Worker implements Comparable<Worker>{
	private String name;
	private double salary;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public Worker(String name, double salary) {
		super();
		this.name = name;
		this.salary = salary;
	}
	public Worker() {
		super();
	}
	@Override
	public String toString() {
		return "Worker [name=" + name + ", salary=" + salary + "]";
	}
	/*
	 * 排序规则
	 * 1、会按照工资进行排序
	 * 2、如果工资相同  则会按照名字排序
	 */
	@Override
	public int compareTo(Worker o) {
		if(this.salary > o.salary)return -1;
		else if(this.salary < o.salary)return 1;
		else {
			if(this.name.compareTo(o.name)>0)return 1;
			else if(this.name.compareTo(o.name)<0)return -1;
			else return 0;
		}
	}
}

九、Map集合

Map是一个以键值对存储的接口。

a)特点:键值对 key-value
key:无序、无下标、元素不可重复
value:无序、无下标、元素可以重复

英汉词典:
hello (key) 你好(value)
hi(key) 你好(value)
How are you (key) 你好(value)
How do you do(key) 你好(value)

b)常用方法
i.boolean containsKey(Object key); //是否包含此key
ii.boolean containsValue(Object value);//是否包含此value
iii.Object get(Object key);//通过key找value
iv.Value put(Object key,Object value);//将此键值对插入到集合中

c)Map集合的实现类
i.HashMap:JDK1.2的类,线程不安全,效率高.可以使用null作为key/value。
ii.Hashtable:JDK1.0的类,线程安全,效率低;不可以使用null作key/value。
注意:使用null作为key/value时编译通过,运行报错。
iii.Properties:Hashtable的子类。key=String;value=String;
通常用于配置文件的读入。
iv. TreeMap(SortedMap(Map的子接口) 的实现类)
会根据key对集合中的元素进行自动排序。

d)遍历方式
i. 键遍历
将所有的key看作一个Set集合,通过keySet()返回Set集合。

在这里插入图片描述
在这里插入图片描述
ii.值遍历
将所有值看作一个Collection集合,通过values()方法返回Collection集合。
在这里插入图片描述
在这里插入图片描述
iii.键值对遍历
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值