我正在实现一个优先级队列,并希望迭代列表以插入正确的位置.在文档中,它声明C#List<T>.Item属性是O(1):
List<T>.Item属性
例如
int retrivedValue = myIntList[5];
Run Code Online (Sandbox Code Playgroud)
这是怎么可能的,因为add也是O(1)?就像吃饼干一样,仍然拥有它.我头脑中的普通列表有O(n)用于访问元素.
有
class BaseClass implements IData ();
class ChildClassA() extends BaseClass;
class ChildClassB() extends BaseClass;
Run Code Online (Sandbox Code Playgroud)
既然做不到
List<BaseClass> aList = new ArrayList<ChildClassA>()
Run Code Online (Sandbox Code Playgroud)
所以有一个
List<? extends IData> aList
for pointint to either
ArrayList<ChildClassA>(),
or
ArrayList<ChildClassB>()
Run Code Online (Sandbox Code Playgroud)
的aList是通过其他路由在运行时建立,并且该代码部分具有如下功能:取List<IData>从所述aList
问题是如果List<? extends IData> aList 指向ArrayList<ChildClassA>() 或 ArrayList<ChildClassB>(),
可以ListData<IData> outputList = (List<IData>) aList吗?如下所示:
(似乎它正在工作,但不确定是否有更好的方法来分配除了强制转换之外的泛型数组.)
编辑:输出List<IData> outputList 是为了只读使用(不可变),没有插入/删除,它只会迭代IData以对IData真正的反应作出反应.
List<? extends IData> aList = new ArrayList<ChildClassA>();
ListData<IData> outputList = (List<IData>)aList
List<? extends IData> aList = new ArrayList<ChildClassB>();
ListData<IData> …Run Code Online (Sandbox Code Playgroud) 我在一个案例中得到List.BinarySearch的奇怪结果.在列出"$ in"的列表中搜索"$ in"时,结果为-4.以下是一个突出问题的测试用例.只有寻找"$ in"的情况才会失败.
它可能是某种保留关键字吗?我编译了.Net Framworks 3.5,4.5.2和4.6,结果相同.
[TestMethod]
public void IssueWithBinarySearch() {
List<string> operators = new List<string>( new[] { "$eq", "$gt", "$gte", "$lt", "$lte", "$ne", "$in", "$nin" } );
Assert.AreEqual( 0, operators.BinarySearch( "$eq" ) );
Assert.AreEqual( 1, operators.BinarySearch( "$gt" ) );
Assert.AreEqual( 2, operators.BinarySearch( "$gte" ) );
Assert.AreEqual( 3, operators.BinarySearch( "$lt" ) );
Assert.AreEqual( 4, operators.BinarySearch( "$lte" ) );
Assert.AreEqual( 5, operators.BinarySearch( "$ne" ) );
Assert.AreEqual( 6, operators.BinarySearch( "$in" ) );
Assert.AreEqual( 7, operators.BinarySearch( "$nin" ) );
}
Run Code Online (Sandbox Code Playgroud) 假设我们有2个班级.第一个是人
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace People
{
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
第二个是老师
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace People
{
class Teacher:Person
{
public string Position { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想在列表中添加老师
Teacher teacher = new Teacher() {FirstName="Peter", LastName="Janson",Position="boss" };
List <Person> people= new List<Person> { };
people.Add(teacher);
Run Code Online (Sandbox Code Playgroud)
如果此列表是类型且人员只有FirstName和LastName属性而且"teacher"还有Position属性,我怎么可能在列表中添加教师?