比较器

c++ stl set 有序性

醉酒当歌 提交于 2019-11-27 19:05:08
stl 中的set 是有序容器,可以通过传入自定义比较器函数对象的方式,设定想要使用的比较方法。 使用迭代器遍历set的时候,遍历的顺序就是set 中比较器定义的顺序。 set < int > s; // 插入的时候按照从大到小的顺序插入 for ( int i = 10 ; i > 0 ; i--) { s.insert(i); } set < int > ::iterator it; // 遍历的时候的输出是从小到大 for (it = s.begin(); it != s.end(); ++it) { cout << *it ; } 可以通过传入比较器函数对象的形式,更改set排序方式 // 从大到小排序的比较器函数对象 struct Compartor { bool operator ()( const int lhs, const int rhs) const { return rhs < lhs; } }; // 声明使用自定义比较器的set set < int ,Compartor> s; // 按照从小到大的顺序插入 for ( int i = 0 ; i < 10 ; i++) { s.insert(i); } set < int > ::iterator it; // 输出的顺序的作用是从大到小 for (it = s.begin(); it != s.end(

Java中的比较器(排序)

ε祈祈猫儿з 提交于 2019-11-27 16:45:11
“顺序“在任何一个领域里都是非常重要的一个概念,程序也不例外。不同的执行顺序,能对你的执行结果产生直接影响。 既然涉及到顺序,那就要求排序。所以本文讨论的就是排序中使用到的比较器Comparable和Comparator。 Comparable和Comparator都是java.包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有不同的用处。 JDK中的Comparable和 Comparator Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较逻辑。 Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些 类是可以和自己比较的。 若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,**实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。**该接口定义如下 // @since 1.2 出现得还是稍微偏晚的 public interface

集合去重比较器和集合遍历

点点圈 提交于 2019-11-27 03:25:25
根据集合中对象的某个字段去重 开发中遇到的数据是居委->小区->房屋->人这么分层的,但是在实际开发过程中并没有小区这一层级,只有房屋中存在小区的信息,在某个弹出框中需要显示该居委下所有的小区,这样我就得查询房屋表下所有的房屋数据,根据小区的谓一致做去重,获得所有的小区数据。 public class Test { private String id; private String location; public Test(String id, String location) { this.id = id; this.location = location; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } } 假如Test中的id相同则认为被比较的数据相同, 通过比较器的方式 private List<Test> testT() { Test test = new Test("0", "位置0"); Test test1

Java基础之比较器、Arrays类、Comparable接口、Comparator接口

拟墨画扇 提交于 2019-11-26 23:28:03
一、Arrays 这个工具类主要用于数组相关的操作功能,在这个类里面有二分查找法、比较两个数组:   public static int binarySearch(byte[] a, byte key)//在进行此调用之前,数组必须按照 sort(byte[]) 方法进行排序 1 /** 2 * 使用Arrays类实现二分查找 3 */ 4 @Test 5 public void changeDateWithLong(){ 6 int[] ints = new int[]{21,33,55,4,556,8,66,44,1,2}; 7 Arrays.sort(ints); 8 /*** 9 * 二分查找,在指定的数组中查找指定的数字 10 * 如果没有找到返回-1 11 * 找到了,返回数字所在的下标索引 12 */ 13 int i = Arrays.binarySearch(ints, 556); 14 System.out.println(i); 15 }   public static boolean equals(boolean[] a,boolean[] a2)//想要两个数组相同,需数组中的元素顺序一致   public static void fill(boolean[] a,boolean val)//填充数组   public static String

关于集合的复习

♀尐吖头ヾ 提交于 2019-11-26 02:14:42
常见的集合有哪些? 答:分为三种集合 List、Set、Map List:ArrayList、LinkedList、Vector Set:HashSet、LinkedHashSet、TreeSet Map:HashMap、HashTable、LinkedHashMap、TreeMap、Properties Properties是一个特殊的Map,用于加载配置文件。 HashMap和HashTable的区别? 答:1、HashMap不考虑同步,线程不安全;HashTable使用了synchronized 关键字,可同步,线程安全。   2、HashMap 键值对允许为空,HashTable键值对不允许为空   3、HashMap和HashTable的父接口不同 什么是哈希冲突? 答:传入两个不同内容的元素,可最后插入集合的时候,它们的哈希值是不同,但经过哈希算法分配的地址也是一样的,就是两个元素在哈希表中的位置一样, 需要在这个位置链出一个位置,放元素。 这个过程叫连地址法。 如何解决HashMap的哈希冲突? 答:使用链地址法 ArrayList 、Vector、LinkedList的区别? 答:1、两者的扩容规则不同,ArrayList的扩容规则是 新容量=旧容量+旧容量/2;Vector的扩容规则是 新容量的=旧容量+扩容因子;   2、ArrayList线程不安全