java基础知识点(三)

一、Collecion集合体系

 Collecion接口
        --List接口:有索引、有序、可以重复
            ArrayList类:数组结构、查询快增删慢
            LinkedList类:链表结构、查询慢增删快
            
        --Set接口:无索引、无序、不可重复

            HashSet类:哈希表(数组+链表+红黑树)、可以对元素去重(原理:
重写hashCode和equals方法)

            LinkedHashSet类:哈希表(数组+链表+红黑树)+双向链表、
包装存取顺序、可以去重(原理:重写hashCode和equals方法)

            TreeSet类:红黑树结构、对元素排序
                排序方式1:让元素类实现Comparable接口,重写compareTo方法
                排序方式2:给TreeSet集合传递Comparator比较器,重写compare方法
                【注意:如果同时存在,优先使用比较器】
    
    常用方法:
        public boolean add(E e)
            添加元素到集合末尾
        public boolean remove(Object e)
            删除元素
        public void clear()
            清空集合
        public boolean contains(Object e)
            判断集合是否包含某一个元素
        public boolean isEmpty()
            判断集合是否为空
        public int size()
            获取集合的长度(元素的个数)
        public Object[] toArray()
            把集合转换为数组
    
    集合的通用遍历方式:
        1)迭代器遍历
            Iteartor<元素类型>  it = 集合.iterator();
            while(it.hasNext()){
                元素类型 变量 = it.next();
            }
            
        2)增强for遍历
            for(元素类型 变量名: 集合/数组){
                
            }
        
        3)forEach遍历
            集合.forEach(s->System.out.println(s));

二、常见数据结构特点
    栈结构:先进后出(子弹夹)
    队列结构:先进先出(排队买票)
    数组结构:查询快增删慢
    链表结构:查询慢增删快
    二叉树:一个节点最多只有两个子节点
    二叉查找树:
        一个节点最多只有两个子节点,每一个节点左子节点都比自己小,右子节点都比自己大
    二叉平衡树
        一个节点最多只有两个子节点,每一个节点左子节点都比自己小,右子节点都比自己大
        对于任意一个节点,左右两个子树的高度差不超过1
    
    红黑树:有自己的平衡规则
        1)对于任意一个节点,要么是红色,要么是黑色
        2)根节点是黑色
        3)如果一个节点没有子节点或者父节点,这个节点则指向Nil,Nil称之为叶子节点,
          叶子节点是黑色的
        4)任意一个节点如果是红色,它的子节点必须是黑色(不能两个红色节点相连)
        5)任意一个节点到其叶子节点的简单路径上,包含相同数目的黑色节点

三、List系列集合

区别:List系列集合相比于Collection来说,多了一些针对索引操作的方法

	常用方法:
		public void add(int index, E e)
			在指定的索引为位置添加元素
		public E remove(int index)
			在指定的索引位置删除元素,把被删除的元素返回
		public E set(int index, E e)
			在指定的索引位置修改元素,把旧的元素返回
		public E get(int index)
			在指定的索引位置获取元素
	
	List接口的实现类有ArrayList、LinkedList,这两种集合的用法是一样的,
只是底层原理不一样。

四、Set系列集合

和List集合的区别:主要就是没有索引、无序、不重复
    它没有特有方法,它的全都来自Collection集合
    
    HashSet、LinkedHashSet和TreeSet集合的用法都是一样的,只是底层原理不一样。


五、泛型

概述:泛型表示一种不确定的数据类型,用<字母>定义。可以用来类上、方法上、接口上

    1.泛型类
		//<T>表示类中不确定的数据类型
		public class 类名<T>{
			
		}
		
		//类上的泛型在创建类的对象时确定
		类名<String> 变量名 = new 类名<>();
	
	2.泛型方法
		//<T>表示方法中有不确定的数据类型
		public <T> void 方法名(T t){
			
		}
		
		//方法上的泛型什么时候确定?调用的时候确定
		方法名("hello");
		方法名(100);
		
	3.泛型接口
		//<T>表示接口中不确定的数据类型
		public interface 接口名<T>{
			public void test(T t);
		}
		
		//接口上的泛型在实现类中确定
		public class 实现类 implements 接口名<String>{
			public void test(String t){
				...
			}
		}
		
	4.泛型通配符:限定泛型数据类型的泛型

		<?> 表示可以匹配所有数据类型
		<? extends 具体类型>	表示指定类型或者指定类型的子类
		<? super 具体类型>		表示指定类型或者指定类型的父类
	
	【注意:一般我们不直接定义泛型,而是使用API中已有的类、方法、接口时,
    会确定泛型的具体类型就行】

六、可变参数

概述:让方法的参数可以接收多个的技术
    //本质:就是一个数组,在方法中把可变参数当做数组用即可。
    public static void 方法名(参数类型... 参数名){
        
    }
 

七、Collections工具类

Collection和Collections区别

		Collection: 单列集合的接口,一般表示所有的单列集合
		Collections:操作单列集合的工具类
	
	public static <T> void addAll(Collection<? super T> c, T... arr)
		可以往任意的Collection集合中,添加多个T类型的元素
	
	public static void shuffle(List<?> list)
		对List集合打乱顺序
	
	public static void sort(List<?> list)
		对List集合排序
	
	public static void sort(List<?> list, Comparator<?> c)
		按照指定的比较器对集合中的元素排序

八、Map集合

概述:Map指的是双列集合,每一个元素是一对一对的,称之为【键值对】
	
	1.Map集合的体系结构
		Map接口:定义了所有双列集合共性的方法
			HashMap类特点:键无序、不可重复、没有索引
			LinkedHashMap类特点:键有序、不可重复、没有索引
			TreeMap类特点:键可以排序、不可重复、没有索引
		
	2.Map集合的常用方法
		public V put(K key, V v)
			添加键值对到集合,如果键重复,会用新的值覆盖旧的值,并且返回旧值
		public V remove(K key)
			根据键删除键值对,把被删除的值返回
		public V get(K key)
			根据键获取值
	
		public boolean containsKey(K key)
			判断Map集合中是否包含键
		
		public int size()
			获取键值对的个数
	
	3.Map集合的遍历方式(三种)
		HashMap<String,String> map = new HashMap<>();
        map.put("新疆", "葡萄干");
        map.put("安徽", "法式鹅肝");
        map.put("云南", "野生菌");
		
		//1.先找键,再找值
		Set<String> keys = map.keySet();
		for(String key: keys){
			String value = map.get(key);
			System.out.println(key+"="+value);
		}
		
		//2.直接获取【键值对对象】,键值对对象用Map.Entry表示
		Set<Map.Entry<String,String>> entrys = map.entrySet();
		for(Map.Entry<String,String> entry: entrys){
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+"="+value);
		}
		
		//3.forEach方法
		map.forEach((key, value)->{
			System.out.println(key+"="+value);
		});

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值