JUST DO IT ~
我只想当个程序员
C# ArrayList.BinarySearch 小问题 --- 必须是按顺序存储 才可以这样 查找
ArrayList.BinarySearch (Object)
使用默认的比较器在整个已排序的
ArrayList
中搜索元素,并返回该元素从零开始的索引。
ArrayList.BinarySearch (Object, IComparer)
使用指定的比较器在整个已排序的
ArrayList
中搜索元素,并返回该元素从零开始的索引。
ArrayList.BinarySearch (Int32, Int32, Object, IComparer)
使用指定的比较器在已排序
ArrayList
的某个元素范围中搜索元素,并返回该元素从零开始的索引。
由 .NET Compact Framework 支持。
---强调一点 。因为是 2分查找。所以必须是
按照顺序存放值, 否则出错。
有2个方式实现 IComparer 和 类自己 实现一个接口 system 中的
D:\c_\arraylist>Test
person CompareTo(object obj) this person is 4 -- objthis person is 3
person CompareTo(object obj) this person is 2 -- objthis person is 3
person CompareTo(object obj) this person is 104 -- objthis person is 3
find person p3 = new person(3); -3 比较后得不到结果 严重问题
-----
person CompareTo(object obj) this person is 4 -- objthis person is 5
find person p3 = new person(3); 6
-----
person CompareTo(object obj) this person is 4 -- objthis person is 1
person CompareTo(object obj) this person is 2 -- objthis person is 1
find person p1 = new person(1); 0
-----
person CompareTo(object obj) this person is 4 -- objthis person is 104
person CompareTo(object obj) this person is 5 -- objthis person is 104
person CompareTo(object obj) this person is 1 -- objthis person is 104
person CompareTo(object obj) this person is -88 -- objthis person is 104
find person p6 = new person(104); -10 -- 比较后得不到结果 严重问题
0 this person is 1
1 this person is 2
2 this person is 104
3 this person is 3
4 this person is 4
5 this person is 122
6 this person is 5
7 this person is 1
8 this person is -88
using
System;
using
System.Collections;
using
System.Collections.Generic;
public
class
Test
{
public
class
person : IComparable
{
public
int
age
=
0
;
public
person(
int
i)
{
this
.age
=
i;
}
public
override
string
ToString()
{
return
"
this person is
"
+
age;
}
public
int
CompareTo(
object
obj)
{
Console.WriteLine(
"
person CompareTo(object obj)
"
+
this
.ToString()
+
"
-- obj
"
+
obj.ToString());
if
(obj
is
person)
{
person temp
=
(person)obj;
return
age.CompareTo(temp.age);
}
throw
new
ArgumentException(
"
object is not a CompareTo
"
);
}
}
public
static
void
Main(
string
[] args)
{
ArrayList list
=
new
ArrayList(
300
);
person p1
=
new
person(
1
);
person p2
=
new
person(
2
);
person p3
=
new
person(
3
);
person p4
=
new
person(
4
);
person p5
=
new
person(
5
);
person p0
=
new
person(
-
88
);
person p6
=
new
person(
104
);
person p7
=
new
person(
122
);
list.Add(p1);
list.Add(p2);
list.Add(p6);
list.Add(p3);
list.Add(p4);
list.Add(p7);
list.Add(p5);
list.Add(p1);
list.Add(p0);
/**/
/*
Console.WriteLine(list[1]);
list.Remove(1); // 1 will be object for method input paramt
Console.WriteLine(list[1]);
list.RemoveAt(1);
Console.WriteLine(list[1]);
*/
/**/
/*
*
* ArrayList list0 = new ArrayList(2);
list0.Add(new person(12));
* list.AddRange(list0);
Console.WriteLine(" 合并集合 AddRange 新的集合都在最后 " + list[2]);
Console.WriteLine(" 老集合的包含的数量 --添加新的以用不修改老的集合 " + list0.Count);
*/
Console.WriteLine(
"
find person p3 = new person(3);
"
+
list.BinarySearch(p3));
Console.WriteLine(
"
-----
"
);
Console.WriteLine(
"
find person p3 = new person(3);
"
+
list.BinarySearch(p5));
Console.WriteLine(
"
-----
"
);
Console.WriteLine(
"
find person p1 = new person(1);
"
+
list.BinarySearch(p1));
Console.WriteLine(
"
-----
"
);
Console.WriteLine(
"
find person p6 = new person(104);
"
+
list.BinarySearch(p6));
for
(
int
i
=
0
; i
<
list.Count; i
++
)
{
Console.WriteLine(i
+
"
"
+
list[i].ToString() );
}
}
}
/**/
/*
Summary:
Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
Parameters:
x: The first object to compare.
y: The second object to compare.
Return Values:
Value Condition Less than zero x is less than y. Zero x equals y. Greater than zero x is greater than y.
Exceptions:
System.ArgumentException: Neither x nor y implements the System.IComparable interface.-or- x and y are of different types and neither one can handle comparisons with the other.
*/
class
personIComparer : System.Collections.IComparer
{
public
int
Compare(
object
x,
object
y)
{
Test.person p1
=
x
as
Test.person;
Test.person p2
=
y
as
Test.person;
if
( p1
==
null
)
{
//
??
}
if
(p1.age
==
p2.age )
{
return
0
;
}
else
{
if
(p1.age
>
p2.age )
{
return
1
;
}
else
{
return
-
1
;
}
}
}
}
/**/
/*
public class Temperature : IComparable {
/// <summary>
/// IComparable.CompareTo implementation.
/// </summary>
public int CompareTo(object obj) {
if(obj is Temperature) {
Temperature temp = (Temperature) obj;
return m_value.CompareTo(temp.m_value);
}
throw new ArgumentException("object is not a Temperature");
}
// The value holder
protected int m_value;
public int Value {
get {
return m_value;
}
set {
m_value = value;
}
}
public int Celsius {
get {
return (m_value-32)/2;
}
set {
m_value = value*2+32;
}
}
}
*/
posted on 2008-02-25 21:08
小高
阅读(1631)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2008年2月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
统计
随笔 - 341
文章 - 0
评论 - 50
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(352)
Architecture 架构设计(9)
(rss)
Build构建|git版本控制(5)
(rss)
C(56)
(rss)
Code 风格|优化|设计模式|数据结构(7)
(rss)
Concurrency 并发(6)
(rss)
Distribution分布式(2)
(rss)
DotNet(29)
(rss)
Exception 异常处理(10)
(rss)
FRONT 前端(2)
(rss)
GUN命令(13)
(rss)
HTML JS CSS
(rss)
J2EE(5)
(rss)
java基础(13)
(rss)
leetcode(1)
(rss)
Linux(33)
(rss)
Mac OSX(23)
(rss)
MQ 消息队列(2)
(rss)
Network| Socket | 进程间通讯(12)
(rss)
Oracle(68)
(rss)
Ruby on Rails(6)
(rss)
Study 学习的艺术(1)
(rss)
Talk 论战
(rss)
其他(20)
(rss)
工作环境搭建(21)
(rss)
敏捷|项目|团队|管理|版本|(4)
(rss)
未完成(4)
(rss)
收藏夹
(19)
实用资料(19)
(rss)
关注的blog
Anders-Hejlsberg
awesome资源
gitbook
POSIX Threads Programming
SystemProgramming
UNIX Specification 2
免费的编程中文书籍索引
刘未鹏
开源图书
徐宥
武剑锋
手册
C 语言编程透视
C_learn_code_the_hardway
C10K
cpp手册
FreeBSD使用手册
Git Community Book 中文版
hacker news
http://www.tldp.org/LDP/abs/html/index.html
leetcode习题书
Linux中文man在线手册
Linux和Unix安全编程HOWTO
Mandrakelinux手册
POSIX Threads for Windows
Programming Ruby实用程序员指南
ruby w3c
search
Shell 编程范例
Shell 编程范例
socket error msdn
TCP 和 UDP 性能调整AIX
unix_socket论坛
w3schools
七月算法
内核分析2003,KernelAnalysis-HOWTO
命令行的艺术
在线编辑markdown文本
开源软件架构
期貨中英文
调试开源书
通讯百科
鸟哥BASH
搜索
积分与排名
积分 - 297962
排名 - 194
最新评论
1. re: eclipse tomcat 配置遇到问题
评论内容较长,点击标题查看
--小高
2. re: mac 使用总结
不会用mac的飘过。
--京山游侠
3. re: ireport sql where List in 多个值 jasper
评论内容较长,点击标题查看
--lul
4. re: c++ 一些经典论文
评论内容较长,点击标题查看
--小高
5. re: redhat 6.5 安装 codeblock 13.12
你好,我实在是安装不上呀,能不能帮帮我,谢谢啦 qq:1669941649
--hanrui
阅读排行榜
1. oracle trunc(sysdate ,'dd') 日期 (20187)
2. ibm thinkpad 键盘 设置(7421)
3. oracle 数字 不要 科学计数法 显示 。(7282)
4. 解决 ghost 安装 sata 方式转换 AHCI 方式 Intel Matrix Storage 蓝屏 此计算机未达到安装此软件的最低要求 (6280)
5. 数组集合 type 类型 is table of 表 %rowtype index by binary_integer;(6089)
评论排行榜
1. sqlplus 初始化 login.sql (6)
2. oracle trunc(sysdate ,'dd') 日期 (5)
3. ibm thinkpad 键盘 设置(3)
4. sqlplus ip 连接 简单连接(3)
5. plsql -develop 的测试 procedure 是这样 实现的..... 绑定变量 未定义 :变量名(2)