导航:首页 > 编程语言 > java泛型排序

java泛型排序

发布时间:2022-08-25 05:21:15

‘壹’ 求教java中Collections中sort泛型的问题。

就是你的List<T>这个T也就是你要放进去的类型,然后呢这个类型T要实现Comparable接口,这个接口有一个compareTo(T o)方法,你要重写这个方法,在这个方法里面写你的排序规则。sort放回调用这个compareTo(T o)方法排序

举个例子:一个User类
public class User implements Comparable{
private int age;

private String name;

//get set方法我就不写了

//比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整 //数、零或正整数。

//这里我就用age比较

@Override

public int compareTo(T o){

User user=(User)o;

if(user!=null){
if(user.getAge()>this.getAge())

return 1;

else if(user.getAge()<this.getAge())

return -1;

else if(user.getAge()=this.getAge())

reutrn 0;

}

}
}

至于你问的那个是什么意思,那个是泛型,可能你现在还不怎么了解,学到后面就会知道了,有专门讲这一章的

‘贰’ 求教java高手 关于TreeSet<E>泛型的排序问题

import java.util.TreeSet;
class Student implements Comparable<Student> {
private int english;
private String name;
public Student(int english, String name) {
this.english = english;
this.name = name;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int compareTo(Student s) {
if (english < s.getEnglish())
return 1;
if (english > s.getEnglish())
return -1;
return 0;
}
@Override
public String toString() {
return "name:" + this.name + " english:" + this.english;
}
}
public class Example7_13 {
public static void main(String args[]) {
TreeSet<Student> mytree = new TreeSet<Student>();
Student st1, st2, st3, st4, st5;
st1 = new Student(90, "zhan ying");
st2 = new Student(66, "wang heng");
st3 = new Student(86, "liu yifei");
st4 = new Student(90, "chan ying");
st5 = new Student(55, "zhan ying");
mytree.add(st1);
mytree.add(st2);
mytree.add(st3);
mytree.add(st4);
mytree.add(st5);
for (Student s : mytree) {
System.out.println(s);
}
}
}

‘叁’ Java泛型方法题目

importjava.util.Arrays;
importjava.util.Collections;
importjava.util.List;


publicclassCollectionSort
{

publicstaticvoidmain(String[]args)
{

}

<Person>
{
privateStringname;

privateintage;

privateStringid;

publicStringgetName()
{
returnname;
}

publicvoidsetName(Stringname)
{
this.name=name;
}

publicintgetAge()
{
returnage;
}

publicvoidsetAge(intage)
{
this.age=age;
}

publicStringgetId()
{
returnid;
}

publicvoidsetId(Stringid)
{
this.id=id;
}

/**
*默认在这里进行排序
*/
publicintcompareTo(Personp)
{
//默认按照name进行排序
intresult=this.name.compareTo(p.getName());
if(this.name.equals(p.getName()))
{
//如果name一样,那么按照年年龄进行排序
result=this.age-p.getAge();
if(this.age==p.getAge())
{
//如果年龄也一样,那么按照id进行排序
result=this.id.compareTo(p.getId());
}
}
returnresult;
}
}

// 定义一个静态方法
publicstatic<TextendsComparable<?>>voidsort(T[]dates)
{
Listl=Arrays.asList(dates);
Collections.sort(l);
}
// 对实现comparable接口的对象进行排序从小到大
// 自定义类,Person有属性name,age,id
// 定义它的数组,进行排序

}

当然不使用person实现compare接口,使用匿名内部类做排序也可以。

‘肆’ JAVA泛型类题目,请大神看看,有重赏!!

treemap只是根据map中的key的值来做排序的,在这里不知道你存储的treemap的健值对是什么,如果你要用treemap进行排行,那么key必须是这些工人的年薪。此处建议不要用treemap排序,而改用arraylist存储工人信息,用Collections.sort对这个list进行按年薪排序最好。

‘伍’ java泛型完成数组问题,刚学泛型,求帮助

整数数组的顺序收缩

public static int seqSearch(int[] arr, int first, int last, int target) {
for (int i = first; i < last; i++)
if (arr[i] == target)
return i;

return -1;
}

‘陆’ java泛型

java泛型是1.5引进的一个新概念.
本题对于"? super T"和"? extends T",我从书上摘个经典的例子给你看看,如果不能理解,那么你就参考以下书籍慢慢体会,循序渐进!

"? super T"和"? extends T",都是java泛型通配符,而用法又有区别,
还有super 和extends 不是java类关系中的超类和继承的意思,他是通配符的下限和上限限制.

下面看一个通配符得高级用法:
在这一部分,我们来考虑一些通配符得高级用法。我们已经看到了上限通配符在从一个数据结构中进行读取的几个例子。现在考虑相反的情况,一个只写的数据结构。

接口Sink是这种情况的一个简单例子。

interface Sink<T> {

void flush(T t);

}

我们可以想象他被如下面的代码一样使用。方法writeAll() 被设计来把集合coll的所有元素flush到sink snk,并且返回最后一个flush的元素。

public static <T> T writeAll(Collection<T> coll, Sink<T> snk) {

T last = null;

for (T t : coll) {

last = t;

snk.flush(last);

}

return last;

}

Sink<Object> s;

Collection<String> cs;

String str = writeAll(cs, s); // 非法的调用!!

像上面所写,writeAll() 的调用是非法的,因为没有有效的类型参数可以被推断出来。String 或 Object都不是T的合适的类型,因为Collection的元素和 Sink的元素必须是同样的类型。

我们可以解决这个问题,通过使用通配符来修改writeAll()的方法签名,如下:

<T> T writeAll(Collection<? extends T> coll, Sink<T> snk) { … }

String str = writeAll(cs, s); //可以调用但是返回值类型错误

这个调用现在是合法的,但是赋值产生错误,因为推断出的返回值类型是 Object因为T 匹配了Sink的类型,Object。

解决方案是使用一种我们还没有见过的有限制的通配符:有下限的通配符。语法 ? super T 表示T的一个未知的父类(或者是T自己)。这跟我们用? extends T 表示T的一个未知的子类是对应的。

<T> T writeAll(Collection<T> coll, Sink<? super T> snk) { … }

String str = writeAll(cs, s); // YES!!!

使用这个语法,这个调用是合法的,推断出来的T是String,正是我们想要的。

现在让我们看一个更现实的例子。一个 java.util.TreeSet<E> 代表一个有序的元素是E类型的树。创建一个TreeSet的一个方法是传递一个 Comparator 对象给构造函数。这个Comparator将会用来按照需要对TreeSet进行排序。

TreeSet(Comparator<E> c)

Comparator 接口是核心:

interface Comparator<T> { int compare(T fst, T snd); }

假定我们要创建一个 TreeSet<String> 并传递一个合适的 Comparator,我们需要传一个能比较String的Comparator。这可以是一个 Comparator<String>,也可以是一个 Comparator<Object>。然而我们不能用Comparator<Object>来调用上面的构造函数。我们可以使用一个有下限的通配符来得到我们需要的灵活性:

TreeSet(Comparator<? super E> c)

这允许任何可用的Comparator被传递进去。

作为使用下限通配符最终的例子,让我们来看看方法 Collections.max(),它返回一个集合中的最大的元素。

现在,为了让max()能工作,传进来的集合中的所有元素必须实现 Comparatable接口。而且,他们必须都能够被彼此比较(all be comparable to each other)。第一个尝试是:

public static <T extends Comparable<T>> T max(Collection<T> coll)

就是说,方法的参数是某一个能和自己进行比较的T的集合。这限制太严格了。

为什么?考虑一个能和任何对象进行比较的类型:

class Foo implements Comparable<Object> {...} ...

Collection<Foo> cf = ...;

Collections.max(cf); // 应该能工作

cf 中的每个元素都可以和每个cf中的其他元素进行比较,因为每个这样的元素都是一个Foo,它可以和任意的对象进行比较,也可以和另一个Foo进行比较。

但是,使用上面的方法签名,我们发现这个调用被拒绝。推断出来的类型必须是Foo,但是Foo没有实现接口 Comparable<Foo>。

T 精确的(exactly)和自己能比较是不需要的。所需要的是 T能够和它的父类中的一个进行比较,这导出:(注:Collections.max()的实际方法签名更复杂,我们在第10部分再讨论。)

public static <T extends Comparable<? super T>> T max(Collection<T> coll)

这个推论对大多数想让 Comparable 对任意类型生效的用法中都有效:你总是应该使用 Comparable<? super T>。

总之,如果你有一个只使用类型参数T作为参数的API,它的使用应该利用下限通配符( ? super T )的好处。相反的,如果API只返回T,你应该使用上限通配符( ? extends T )来给你的客户端更大的灵活性。

(原文:This reasoning applies to almost any usage of Comparable that is intended to work for arbitrary types: You always want to use Comparable<? super T>.

In general, if you have an API that only uses a type parameter T as an argument, its uses should take advantage of lower bounded wildcards (? super T). Conversely, if the API only returns T, you'll give your clients more flexibility by using upper bounded wildcards (? extends T). )。

如果你想比较深刻的了解java泛型那么
建议你看看<Java1.5泛型指南>
中文链接地址:http://blog.csdn.net/explorers/archive/2005/08/15/454837.aspx#_Toc111865968
英文pdf格式地址:http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

‘柒’ 用泛型编写一个冒泡排序法(java语言)

package com.xx.test;

public class BubbleSort<E> implements Comparable<E>{

public void bubbleSort(E[] array) {

// 声明一个变量用于交换两个元素时使用
E temp;

for(int i = 0; i < array.length - 1; i++) {
for(int j = 0; j < array.length - i - 1; j++) {
if(((Comparable<E>) array[j]).compareTo(array[j + 1]) < 0) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}

public int compareTo(E o) {
// 这里要实现比较两个对象的大小
return 0;
}
}
因为是泛型,所以需要根据实际情况来写一个compareTo方法来比较大小,例如传进来的是基本数据类型,那么就直接比较大小,如果传进来的是字符串,按字典顺序重写compareTo()方法,其他的类型又怎么比较就行了!

阅读全文

与java泛型排序相关的资料

热点内容
编译原理代码在哪里运行 浏览:584
解密摄影pdf 浏览:72
算法编程中级题目 浏览:249
c语言编译器毕业设计 浏览:715
医保卡申请app哪个好 浏览:944
阿里云服务器上传源码 浏览:602
营销管理科特勒pdf 浏览:696
愿望清单app哪个好 浏览:459
安卓外放声音怎么解决 浏览:195
脉脉app干什么用的 浏览:360
拽姐是哪个app 浏览:860
云服务器删除了还有吗 浏览:234
macbook可以用单片机嘛 浏览:309
南阳php招聘 浏览:816
去哪里找按摩师很漂亮的app 浏览:821
86x99用简便算法计算 浏览:833
php截图flash 浏览:276
卸载联想app哪个好 浏览:721
php文字转图片 浏览:332
豆客后台怎么加密码 浏览:577