Java 数据结构与泛型学习笔记

前言

1 常用数据结构

Collection类图(部分)如下

«interface» Collection «interface» Set «interface» List ArrayList add(E elem) add(int index, E elem) addAll(int index, Collection c) remove(int index) remove(Object o) contains(Object o) isEmpty() indexOf(Object o) size() get(int index) set(int index,Object o) sort(Comparator c) toArray(E[] elems) forEach(Consumer<E> action) LinkedList add(int index, E elem) addAll(int index, Collection c) addFirst(E elem) addLast(E elem) clear() removeFirst() removeLast() remove(Object o) remove(int index) contains(Object o) get(int index) getFirst() getLast() indexOf(Object o) lastIndexOf(Object o) set(int index, E element) toArray(E[] elems) Vector boolean add void addElement void add boolean addAll boolean addAll Object clone boolean contains boolean containsAll void copyInto E elementAt E firstElement E lastelement E get int indexOf int lastIndexOf boolean isEmpty void clear E remove boolean remove void removeRange int size Stack E item peek() pop() empty() search(Object o) «interface» SortedSet TreeSet LinkedHashSet HashSet add(Object o) size() remove(Object o) isEmpty() clear() iterator() contains(Object o) extends extends implements implements implements extends extends implements implements implements
«interface» Map «interface» SortedMap TreeMap HashMap put(key,value) putAll(int index, Collection c) isEmpty() size() remove(key,value) replace(key,oldvalue,newvalue) get(key) containskey(key) containsValue(value) clear() entrySet() keySet() values() merge(key, value, remappingFunction) merge(key, value, remappingFunction) forEach(Consumer<E> action) LinkedHashMap HashTable extends implements implements implements implements

1.1 String

String int length char[] toCharArray int indexOf String toUpperCase String toLowerCase String[] split Strin trim String replace String replaceFirst String subString boolean equals boolean contains Object o boolean isEmpty boolean startsWith boolean endsWith String copyValueOf

主要介绍String类型及一些主数据类型的方法使用,类方法如上所示,下面记录一些特殊用法

String str = "Hello World!";
String[] strs = str.split("");//字符串转字符串数组
char c = str.charAt(0);//字符串取字符
char[] chars = str.toCharArray();//字符串转字符数组
String str = String.valueOf(chars);//字符数组转字符串
String str = String(chars);//字符数组转字符串
//其他主数据类型转为String
String.valueOf(Object o);
//String转为其他主数据类型
Integer.parseInt(str);
Double.parseFloat(str);

1.2 ArrayList

ArrayList<Object> list = new ArrayList<Object>();
//1.传统遍历
for(int i = 0;i<list.size();i++){
	System.out.println(list.get(i));
}
//2.简洁遍历
for(Object tem:list){
	System.out.println(tem);
}
//3.迭代器遍历
Iterator<Object> iter = list.iterator();
while (iter.hasNext()) {
	System.out.println(iter.next());
}

1.3 HashMap

HashMap<key,value> map = new HashSet<key,value>();
//遍历
 public static void main(String[] args) {
		// 循环遍历Map的4中方法
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        map.put(1, 2);
        // 1. entrySet遍历,在键和值都需要时使用(最常用)
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
        }
        // 2. 通过keySet或values来实现遍历,性能略低于第一种方式
        // 遍历map中的键
        for (Integer key : map.keySet()) {
            System.out.println("key = " + key);
        }
        // 遍历map中的值
        for (Integer value : map.values()) {
            System.out.println("key = " + value);
        }
        // 3. 使用Iterator遍历
        Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, Integer> entry = it.next();
            System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
        }
        // 4. java8 Lambda
        // java8提供了Lambda表达式支持,语法看起来更简洁,可以同时拿到key和value,
        // 不过,经测试,性能低于entrySet,所以更推荐用entrySet的方式
        map.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });
    }

1.4 HashSet

Set(集合)防止重复,通过先判断新加入的元素和集合内的元素的hashCode()是否相等再通过a.equals(b)方法判断是否真的相同,所以如果要引入自定义类的实例变量,该类必须覆盖hashCode()和equals()方法。
基础的HashSet,保持集合有序TreeSet(要求集合内元素必须实现Comparable接口,并实现compareTo()方法)。

HashSet<Object> set = new HashSet<Object>();
//1.简洁遍历
for(Object tem:set){
	System.out.println(tem);
}
//2.迭代器遍历
Iterator<Object> iter = set.iterator();
while (iter.hasNext()) {
	System.out.println(iter.next());
}

1.5 Vector

Vector vector = new Vector();
//遍历方式同ArrayList,未写明类型同<Object>

2 泛型 <>

主要作用是定义集合的数据类型,以ArrayList为例,E代表用来创建与初始ArrayList的类型,当你看到E时,替换为实际的类型。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
	public boolean add(E o)
	//more codes
}

泛型、数组、多态与传参
设:class Animal;class Dog extends Animal;class Cat extends Animal;
1、当方法参数设定为Animal[]时,可以将存有Dog、Cat对象的Animal[]数组传入方法,并正常编译执行。
2、当方法参数设定为Animal[]时,可以将存有Dog的Dog[]数组传入方法,但不能正常执行。
3、当方法参数设定为ArrayList<Animal 时,只能传入ArrayList<Animal 列表,传入Dog或Cat列表即报错。
4、当通过泛型或万用字符方法定义函数参数时,可以向方法传入多态参数列表。
自定义使用泛型的方法

//只能传入Animal类对象
public void takeThing(ArrayList<Animal> list){}
//泛型定义,可以传入Animal及它的子类对象,Animal可以是类,也可以是接口
public <T extends Animal> void takeThing(ArrayList<T> list){}
//万用字符定义,可以传入Animal及它的子类对象,Animal可以是类,也可以是接口
public void takeThing(ArrayList<? extends Animal> list){}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值