标签: list-template

List <T> .Item属性如何为O(1)?错字?

我正在实现一个优先级队列,并希望迭代列表以插入正确的位置.在文档中,它声明C#List<T>.Item属性是O(1): List<T>.Item属性

例如

int retrivedValue = myIntList[5];
Run Code Online (Sandbox Code Playgroud)

这是怎么可能的,因为add也是O(1)?就像吃饼干一样,仍然拥有它.我头脑中的普通列表有O(n)用于访问元素.

c# list list-template

27
推荐指数
7
解决办法
4983
查看次数

如何分配List <?将BaseClass>扩展为List <BaseClass>

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)

java generics list-template

5
推荐指数
1
解决办法
116
查看次数

List <T> .BinarySearch返回意外结果

我在一个案例中得到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)

c# binary-search list-template

1
推荐指数
1
解决办法
34
查看次数

C#List <T>添加继承的项目

假设我们有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属性,我怎么可能在列表中添加教师?

c# inheritance linked-list list-template

0
推荐指数
2
解决办法
1487
查看次数