集合的整理,总结.案例代码()

集合重点整理:
collection<E>接口---list<E>接口和set<E>接口(线性集合)

List接口--------的实现类中主要学习了ArrayList. LinkedList. Vector. Stack(是Vector类的一个子类)类。
实现List接口的集合:总体上有序(针对元素插入的顺序),不排除重复

ArrayList---底层通过数组实现,适用于元素的修改和查找操作,
常用方法:add(). addAll(). clear(). contians(Objiec o). contiansAll(). get(int index)
indexOf(Object o). Iterator(). ListIterator(). isEmpty(). size(). suList()
remove(). removeAll(). retainAll(). set(int index,Object o). trimToSize()

LinkedList--底层通过链表实现,适用于元素的增加和删除操作,
除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名

方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
所以也有 peek() pop() push()方法 addFirst(), addLast(), getFirst(), getLast(), peek()
peekLast(), addFirst(), addLast(), removeFirst(), removeLast()

Stack-------创建一个空堆栈,常用方法: peek() pop() push()

实现List接口集合的遍历方式:
1:for循环(增强for循环)
2:Iterator()迭代器
3:listIterator() list的专属迭代器 允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器

在列表中的当前位置

Set接口-------------的实现类 HashSet . LinkedHashSet(是HashSet的子类). TreeSet
实现Set接口的集合:总体无序存储,排重.set 不包含满足e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个

null 元素

TreeSet-----实现Set接口的同时,也实现了SortedSet接口 进一步提供关于元素的总体排序 的 Set。这些元素使用其自然顺序

进行排序,或者根据通常在创建有序 set 时提供的 Comparator 进行排序。该 set 的迭代器将按元素升序遍历

set。提供了一些附加的操作来利用这种排序。(headSet(), subSet(), tailSet())

TreeSet集合的元素排序:
自然排序:自动调用Compareto方法,对元素升序排序.当然我们也可以实现Comparable接口重写

Compareto方法来按照我们想要的顺序来排序.(重写必须实现Comparable接口)
定制排序:实现Compartor接口,重写Compare方法.
创建 set 时提供的 Comparator 进行排序(使用匿名内部类,实现我们想要的排序)
构造方法中必须要传入一个比较器,不能使用无参构造
TreeSet<E> t = new TreeSet<>(comparator)
HashSet, LinkedHashSet(extends HashSet)区别不大. 如果要按照我们自己的条件排重,就必须重写equals()和hashCold()方法

Map接口-------------映射性集合,元素以键值对的形式存在(key=value;key:value)相对无序,整体排重(只对key进行排重)
put(k key,v value)具体方法查API;

HashMap, LinkedHashMap(extends HashMap) 排重,可以重写equals()和HashCold()方法来实现我们定义的排重效果

Hashtable, Properties(extends Hashtable) 不允许key,value为null

TreeMap 实现了Map接口,也实现了SortedMap接(口进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然

顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序)
排序只对key进行排序,和TreeSet集合相似, 1:实现Compartor接口,重写Compare方法
2:实现Comparable接口,重写Comparato方法
Map集合的遍历方式:
1: 通过keySet()方法,获取包含key的set视图,
然后遍历该set集合,得到所有的key,
通过get()方法获取value;
2: 通过entrySet()方法,得到包含映射关系的 Set 视图(Set<Map.Entry<k,v>>)
可以直接遍历该set集合,直接得到键值映射关系
也可以通过Map.Entry<k,v>接口中的getKey()和getValue()方法来分别获得键和值对;

下面有两个 案例  大家可以参考一下

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.Comparator;

public class Student implements Comparator<Student>{          //这是一个简单的学生类  
    String name;
    int age;
    int score;
public Student(String name, int age, int score) {
    super();
     this.name = name;
    this.age = age;
    this.score = score;
}

public Student() {
    super();
}

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;
}
public int getScore() {

return score;
}
public void setScore(int score) {

this.score = score;
}
@Override
public String toString() {
return "学生 [名字=" + name + ", 年龄=" + age + ", 分数=" + score + "]";
}
@Override
public int compare(Student o1, Student o2) {      //重写compare方法   因为实现的是 Comparator接口 (定制排序)
if(o1.score-o2.score!=0){
return o1.score-o2.score;

}else {
if(o2.age-o1.age!=0){
return o2.age-o1.age;
}else{
if(o1.name.compareTo(o2.name)!=0){
return o1.name.compareTo(o2.name);
}else{
return 0;
}
}
}
}

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TestStudent {                                 //测试类
public static void main(String[] args) {
      TreeSet<Student> t= new TreeSet<>(new Student());   //这里用TreeSet集合的有参数的构造方法  传入一个比较器进去  new Student()
        t.add(new Student("a", 18, 56));
        t.add(new Student("e", 12, 23));
        t.add(new Student("d", 15, 23));
        t.add(new Student("f", 11, 89));
        t.add(new Student("q", 18, 12));
        t.add(new Student("q", 1, 12));

        //System.out.println(t.size());
      Iterator<Student> s = t.iterator();
        while(s.hasNext()){
          System.out.println(s.next());
}

 TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {      //如果我们在Student类中 重写compare方法中 没有实现具体的代码  我们可以再这里传入一个匿名内部类的方式

@Override
public int compare(Student o1, Student o2) {
    if(o1.score-o2.score!=0){
      return o1.score-o2.score;
    }else if(o2.age-o1.age!=0){
      return o2.age-o1.age;
    }else{
      return o1.name.compareTo(o2.name);
  }
  }
  });                  //到这里 这条语句才结束   创建了一个TreeSet集合 里面传入了一个Comparetor 比较器
}
}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Student implements Comparable<Student>{
    String name;
    private int scores;
    private int age;
    private String sex;
    private int id;
    private int mathscore;
    private int chinesescore;
    private int engishscore;
    private int allscore;

public Student(String name, int scores, int age, String sex, int id, int mathscore, int chinesescore,
int engishscore, int allscore) {
      super();
      this.name = name;
      this.scores = scores;
      this.age = age;
      this.sex = sex;
      this.id = id;
      this.mathscore = mathscore;
      this.chinesescore = chinesescore;
      this.engishscore = engishscore;
      this.allscore = allscore;

}
@Override
public int compareTo(Student o) {              //自然排序 重写 compareTo方法,把每个属性都需要添加进去比较 才能给达到排重的功能  如果你另外去写equals和hashcode 是没法达到目的的

                   //就算重写了 这两个方法  在加入集合的时候 不会调用这两个方法排重  只会用到 compareTo方法
    if((o.getAllscore()+o.getChinesescore()+o.getEngishscore()+o.getMathscore())!=
      (this.allscore+this.chinesescore+this.engishscore+this.mathscore)){
        return (o.getAllscore()+o.getChinesescore()+o.getEngishscore()+o.getMathscore())-
            (this.allscore+this.chinesescore+this.engishscore+this.mathscore);
  }else if(this.allscore!=o.getAllscore()){
      return o.getAllscore()-this.allscore;
     }else if(this.mathscore!=o.getMathscore()){
        return o.getMathscore()-this.mathscore;
      }else if(this.engishscore!=o.getEngishscore()){
        return o.getEngishscore()-this.engishscore;
    }else if(o.getChinesescore()!=this.chinesescore){
        return o.getChinesescore()-this.chinesescore;
    }else if(!o.getName().equals(this.name)){
        return o.getName().compareTo(this.name);
    }else if(o.getAge()!=(this.age)){
      return o.getAge()-(this.age);
    }else{
      return o.getSex().compareTo(this.sex);
}
}

//  这样写来为了实现排重 是没有任何意义的 
/*@Override                           
public boolean equals(Object obj) {
if(obj instanceof Student){
Student s = (Student) obj;
if(s.getName().equals(this.name)&&s.getAge()==this.age&&
s.getSex().equals(this.sex)&&s.getId()==this.id){
return true;
}
}
return false;
}
@Override
public int hashCode() {
return this.age+this.id+this.chinesescore+this.engishscore+this.mathscore
+this.allscore;
}*/

}

时间: 2024-08-28 17:10:15

集合的整理,总结.案例代码()的相关文章

经典XSS跨站脚本集合汇总整理

1)普通的XSS JavaScript注入 <SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT> (2)IMG标签XSS使用JavaScript命令 <SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT> (3)IMG标签无分号无引号 <IMG SRC=javascript:alert('XSS')> (4)IMG标签大小写不敏感 <IMG SRC=JaVaScR

Python中set集合的整理

set集合函数主要用来去除重复: 比如一个列表有多个重复值,可以用set搞掉 >>> l = [1,2,3,4,5,4,3,21] >>> >>> l [1, 2, 3, 4, 5, 4, 3, 21] >>> >>> >>> set(l) set([1, 2, 3, 4, 5, 21]) >>> set  可以做交集,并集,差集 set的增删改 增:>>> a

java 编程思想 22.11: java bean 案例代码

java 编程思想  22.11:   java bean 案例代码 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.swing.bean; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.KeyListener; import org.rui.

用JS添加文本框案例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

java集合框架之java HashMap代码解析

 java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/article/java-hashmap-java-collection.html 签名(signature) public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Se

整理了旧有代码并应用了git来托管代码另外大量阅读了关于学习安排方面的资料

1.清华大学课程设置(国内大学的计算机系课程可以作为计算机系广度调查课程) 2.MIT课程设置(国外大学的计算机系课程设置起到借鉴考察作用) 3.自学的计划安排(基于自己的学习经验所组织) 主要部分为课程和书籍方面的选择,选择一个好的课程在选择一个好的教程进行学习可达到事半功倍之效果 关键点: 学以致用  即学习的知识必须是以后能用到的,且是感兴趣的,有些课程既然不打算做这些方面的工作则不必学习,等需要时在学永远是不会错的策略 若想深入学习关于计算机各个方面,可等以后有经济条件以后在学 最少学习

编程算法 - 二叉搜索树(binary search tree) 集合(set)和映射(map) 代码(C)

二叉搜索树(binary search tree) 集合(set)和映射(map) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 二叉搜索树(binary search tree)作为常用而高效的数据结构, 标准库中包含实现, 在标准库的集合(set)和映射(map), 均使用. 具体操作代码如下. 代码: /* * main.cpp * * Created on: 2014.7.20 * Author: spike */ /*eclipse

银联在线支付---利用测试案例代码模拟测试应用

一.工程搭建 新建一个Web工程,命名为PayOnLine,把你下载好的案例代码拷贝到你的工程下,我的代码目录如下: acp_sdk.properties配置文件需要放在类根路劲下,里面的参数配置信息,下面是案例提供的配置提示: 0. 注意: 1)依赖包和upacp_sdk-1.0.0.jar都需加到buildpath. 2)acp_sdk.properties放到src根目录下.另外如果用的不是eclipse/MyEclipse可能这个文件默认不会被拷贝到classes目录下,导致加载不到这个

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... ); 1.查看表 exec sp_help table1; 2.创建表 create tab