java整理之集合框架

一.集合框架的分类
    1.为什么会出现集合框架,他与数组的区别(3点)
    2.在util包下,使用的时候需要导包(建议一直导到类名下)。
    3.结构
      集合框架
collection(接口)
List(子接口)
ArrayList(具体实现类)
Vector (具体实现类)
LinkedList (具体实现类)


Set(子接口) HashSet(具体实现类)

TreeSet(具体实现类)




map(接口)
HashMap(具体实现类)

TreeMap(具体实现类)
  4.各个结构的优缺点
       A.Collection与Map的比较
       B.List和Set及其具体实现类的特点、底层的数据结构、、何时使用、区别与联系
       C.HashMap和TreeMap的区别。
   5.Collection的功能以及其实现类的功能
        A.添加 boolean add(E e)  //添加指定的元素e,这里是加到集合的末尾
boolean addAll(Collection <? extends E> c)
项目3
        B.删除
void clear()
boolean remove(object o)     //这里返回的是Boolean类型的,与后面的注意区分
boolean removeAll(Collection<? > c)
        C.获取 iterator
foreach
        D.判断 boolean isEmpty()
boolean conatains(object o)
boolean containsAll(collection<?> c)   //判断是否存在c集合里的元素
        E.长度 int size()    //返回元素个数
    6.List的功能(只讲与Collection的不同的)
        A.添加
void add(int index,E element)
boolean addAll(int index,Collection<? extends E> c)
        B.删除 E romove (int index)     //这里返回的是集合中被删除的元素
        C.获取  int indexOf(object o)    //根据元素值返回下标,第一次出现该元素的
 int lastIndexOf(objcect o)
E get(int index)
List subList(int fromIndex, int toIndex)   //返回一个包含fromIndex的不包含toIndex的
          D.判断
          E.长度
        F.修改 E set(int index E element)
      7.ArrayList的功能(只讲与List不同的)
这里的功能是Collection和ArrayList功能的合集。
   8.LinkedList的功能(只讲与List的不同)
        A.添加 void addFirst(E e)  //将指定的元素插入列表的开头。当然也有AddLast()但是这样没有意义
        B.删除 E removeFirst()
E removeLast()
        C.获取 E getFirst()
E getLast()
二.set子接口的具体类
    1.HashSet的功能(只讲与Collection的不同)
事实上没有,由于HashSet是没有下标的,他的底层是HashMap因此,他没有根据下标获取某个值的方法!
     HashSet是通过哈希值来去报唯一性的(比较的逻辑记得背一下),它只能保证字符,数字,字符串的唯一性。如果想保证对象的唯一性,就必须重写HsanCode()和equals()。(可以直接在source进行快捷设置)
    2.TreeSet的功能(只讲与Collection的不同)
        A.添加
        B.删除 E pushFirst()     //获取并移除第一个元素
E pushLast()     //获取并移除最后一个元素
        C.获取
E first()
E last()
E lower()  //小于给定元素的最大值,没有返回null
E higher()   //大于给定元素的最小值
SortedSet<E> headSet(E toElement)   //返回小于给定元素的TreeSet的子集合
SortedSet<E> trailSet(E fromElement)   //返回大于给定元素的TreeSet的子集合
SortedSet<E> subSet(E fromElement, E toElement)  //返回包含fromenElement不包含toElement的TreeSet的子集合

    TreeSet是基于TreeMap的集合,通过元素的自然排序或者Comparator来实现!也就是说,如果想实现对象排序,就必须重写comparable接口的compareTo方法。
或者通过比较器comparetor比较,comparetor比较是一种接口,要实现重写他的compare方法,推荐使用匿名内部类的方法重写,可以节约内存。
   
   
public class Student implements Comparable<Student> {
//成员变量
private String name;
private int age;
//构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student() {
}
 
//setget方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写compareTo方法
@Override
public int compareTo(Student o) {
//如果返回一个正数,默认每次传入的都是大的
//如果返回0每次都默认两个数相同
//如果返回一个负值,则认为每次都比传入的值小
//这标识让年龄相减,根据正负进行排
//事实上这种比较是有问题的,如果两个学生的年龄相同但姓名不同,能认为是同一个人吗?显然这里是需要再进行判断的
int num = this.age - o.age;
//基本数据类型是可以直接进行compareTo(),因为他们已经实现了compareTo()
int num2 = num==0?this.name.compareTo(o.name):num;
return num2;
}
}
    
    
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
 
public class Demo {
public static void main(String[] args) {
//声明一个TreeSet
TreeSet<Integer> ts = new TreeSet<Integer>();
TreeSet<Student> ts1 = new TreeSet<Student>();
//在没有设置排序方案时,这个代码是会报类型转换错误的
//给TreeSet赋值
//Student s1 = new Student("杨华彬",23);
// ts.add(new Student("杨华彬",23));
// ts.add(new Student("刘德华",50));
// ts.add(new Student("汪园",20));
// ts.add(new Student("令狐冲",29));
// ts.add(new Student("郭靖",11));
// ts.add(new Student("杨华彬",23));
//ts.add(s1);
//遍历集合
// for (Student student : ts) {
// System.out.println(student.getName()+"*********"+student.getAge());
// }
ts.add(3);
ts.add(4);
//用foreach遍历集合
for (Integer integer : ts) {
System.out.println(integer);
}
//用iterator遍历集合
Iterator<Integer> it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
/**
* 使用继承以后的添加并遍历对象
*/
//添加对象
ts1.add(new Student("杨彬",23));
ts1.add(new Student("刘德华",50));
ts1.add(new Student("汪",20));
ts1.add(new Student("令狐冲",29));
ts1.add(new Student("郭靖",11));
ts1.add(new Student("杨彬",23));
ts1.add(new Student("老刘",23));
//遍历集合
for (Student student : ts1) {
System.out.println(student.getName()+"*********"+student.getAge());
}
/**
* 使用比较器comparetor进行比较
*/
//匿名内部类,重写compare方法,如果比较只用一次的话,推荐用匿名内部类来写,这样可以节省很多内存
TreeSet<Student> ts4 = new TreeSet<Student>(new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
int num = o1.getAge() - o2.getAge();
int num2 = num==0?o1.getName().compareTo(o2.getName()):num;
return num2;
}
});
ts4.add(new Student("杨彬",23));
ts4.add(new Student("刘德华",50));
ts4.add(new Student("汪",20));
ts4.add(new Student("令狐冲",29));
ts4.add(new Student("郭靖",11));
ts4.add(new Student("杨彬",23));
ts4.add(new Student("老刘",23));
for (Student student : ts1) {
System.out.println(student.getName()+"*********"+student.getAge());
}
}
}
三.Map
    存储的是键值对,通过Hash和Tree来保证他的键的唯一性,故只有HashMap和TreeMap。
记住啦:Map是不能使用Iterator的方法进行遍历的。
    1.主要方法
        A.添加 V put(K key,V value)
void putAll(Map<? extends K,? extends V> m)
        B.删除 V remove(Object key)
        C.获取 Set<k>t keySet()
Collection<v> values()
        D.判断 Boolean containsKey(object key)
boolean containsValue(object value)
        E.长度 int size()
    2.HashMap和Map的方法没有区别。
    3.我们不记那么多,用到了就来查API文档吧,只要记住Map的方法即可!
这里的Student类还是上面的Student类!
   
   
package Practise;
 
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
 
public class Demo {
public static void main(String[] args) {
// 实例化一个TreeMap
TreeMap<Student, String> tm = new TreeMap<Student, String>();
// 进行赋值
tm.put(new Student("杨彬", 23), "1");
tm.put(new Student("刘德华", 50), "2");
tm.put(new Student("汪", 20), "3");
tm.put(new Student("令狐冲", 29), "4");
tm.put(new Student("郭靖", 11), "5");
tm.put(new Student("杨彬", 23), "6");
tm.put(new Student("老刘", 23), "7");
// 遍历
// 这里不会报错,因为我已经在Student类中重写了compareTo方法
Set<Student> set = tm.keySet();
for (Student student : set) {
System.out.print("这里的键是:" + student.getName() + student.getAge());
System.out.println("这里的值是:" + tm.get(student));
}
/**
* 这里我将运用匿名内部类的comparetor的方法进行取值
*/
TreeMap<Student, Integer> tm1 = new TreeMap<Student, Integer>(
new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num = o1.getAge() - o2.getAge();
int num1 = num == 0 ? o1.getName().compareTo(
o2.getName()) : num;
return num1;
}
});
// 赋值
tm1.put(new Student("杨彬", 23), 1);
tm1.put(new Student("刘德华", 50), 2);
tm1.put(new Student("汪", 20), 3);
tm1.put(new Student("令狐冲", 29), 4);
tm1.put(new Student("郭靖", 11), 5);
tm1.put(new Student("杨彬", 23), 6);
tm1.put(new Student("老刘", 23), 7);
// 取得键值的集合
Set<Student> ss = tm1.keySet();
for (Student student : ss) {
System.out.println("键值是:" + student.getAge() + student.getName());
System.out.println("值是;:" + tm1.get(student));
}
}// main方法的结尾
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值